Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 侦听器中的PrintWriter使应用程序崩溃_Android_Tcp_Arduino_Crash_Printwriter - Fatal编程技术网

Android 侦听器中的PrintWriter使应用程序崩溃

Android 侦听器中的PrintWriter使应用程序崩溃,android,tcp,arduino,crash,printwriter,Android,Tcp,Arduino,Crash,Printwriter,我想创建一个非常简单的TCP/IP客户端服务器,其中Android设备作为客户端,Arduino作为服务器 这是我的代码: public class MainActivity extends AppCompatActivity { private Socket socket; private static final int SERVERPORT = 80; private static final String SERVER_IP = "192.168.1.141"

我想创建一个非常简单的TCP/IP客户端服务器,其中Android设备作为客户端,Arduino作为服务器

这是我的代码:

public class MainActivity extends AppCompatActivity {

    private Socket socket;

    private static final int SERVERPORT = 80;
    private static final String SERVER_IP = "192.168.1.141";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Thread(new ClientThread()).start();
    }

    public void onClick(View view){
        try {
            TextInputLayout input1 = (TextInputLayout) findViewById(R.id.input1);
            String str = input1.getEditText().getText().toString();

            PrintWriter out = new PrintWriter(this.socket.getOutputStream(), true);
            out.println(this.socket.getInetAddress().toString());
            out.flush();

        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }

    class ClientThread implements Runnable{
        @Override
        public void run(){
            try{
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
                socket = new Socket(serverAddr, SERVERPORT);
            }
            catch(UnknownHostException e1){
                e1.printStackTrace();
            }
            catch(IOException e2){
                e2.printStackTrace();
            }
        }
    }
}    
当我启动应用程序时,手机成功连接到服务器(我可以从Arduino的串行监视器中看到),但当我单击按钮时,它可能会因为PrintWriter类而崩溃

奇怪的是,如果我从ClientThread类中的run()方法打印一条消息,那么消息就可以正常发送了

奇怪的是,当我通过Android Studio emulator运行该应用程序时,它并没有崩溃,但在真实设备上确实如此


这个问题源于onClick listener和PrintWriter的组合,但我不知道确切的原因。

好吧,崩溃可能是因为在无法建立到服务器的连接的情况下,您试图访问
socket
变量时,该变量为空。出现这种情况的确切原因可以在日志中找到(网络问题、安全问题等,所有可能的原因)。

解决方案是我还需要从另一个线程打印到套接字。

应用程序正在崩溃,日志猫后。