簡體   English   中英

我的客戶代碼使我的android應用崩潰

[英]My client code makes my android app crash

所以我有在eclipse中測試過的Client代碼,並且在這里可以正常工作

try {
            // Establish connection
            Socket socket = new Socket(InetAddress.getByName("192.168.1.104"), 9000);

            // Request data
            OutputStream outputStream = socket.getOutputStream();
            InputStream inputStream = socket.getInputStream();

            msg = "IDGN:" + "1";
            System.out.println(msg);

            outputStream.write(msg.getBytes());
            socket.shutdownOutput();
            scanner = new DataInputStream(inputStream);
            restaurante = scanner.readUTF();
            System.out.println(restaurante);

            // Shut down socket
            socket.shutdownInput();
            socket.close();
    } catch (IOException io) {
        io.printStackTrace();
    }

但是當我嘗試在我的android應用中執行相同操作時,它崩潰了

try {
                    // Establish connection
                    Socket socket = new Socket(InetAddress.getByName("192.168.1.104"), 9000);

                    // Request data
                    OutputStream outputStream = socket.getOutputStream();
                    InputStream inputStream = socket.getInputStream();

                    msg = "IDGN:" + "1";
                    outputStream.write(msg.getBytes());
                    socket.shutdownOutput();

                    scanner = new DataInputStream(inputStream);
                    restaurante = scanner.readUTF();

                    View b = findViewById(R.id.texto);
                    b.setVisibility(View.VISIBLE);
                    String ss = "Valore el servicio recibido en: " + restaurante;
                    ((TextView) b).setText(ss);

                    // Shut down socket
                    socket.shutdownInput();
                    socket.close();
                }catch (IOException io) {
                    io.printStackTrace();
                }

我只是不知道為什么,我試圖使它等待數據准備就緒,將其更改為OutputStream並從掃描儀讀取一行,直接從OutputStream讀取字節。

在這兩種情況下(Android和Eclipse),服務器似乎都可以正常接收數據,並發送正確的答案。

完成后關閉或刷新輸出流。 我認為這導致應用程序內存泄漏

您不能在同一線程中同時具有網絡I / O和UI操作,例如TextView#setText() 嘗試在UI線程上執行網絡I / O會導致NetworkOnMainThreadException 嘗試在非UI線程上執行UI操作會導致CalledFromWrongThreadException 猜猜您的代碼在其中之一上崩潰了。

有一些高級線程機制,例如rxjava調度程序或kotlin協程。 在不添加其他庫依賴項的情況下,您可以嘗試將網絡代碼移動到AsyncTask

也可以看看:

如何修復android.os.NetworkOnMainThreadException?

不幸的是MyApp已經停止了。 我該如何解決?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM