繁体   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