2012-08-14 128 views
1

我一直在试图让我的手机上运行的SocketServer。我最近升级到了ICS,所以现在我需要在一个单独的线程中完成我的网络工作,这是我不习惯的。我写了一些代码,但一旦我尝试连接到套接字,应用程序崩溃。Android SocketServer崩溃应用程序

我开始当切换通断开关切换将ServerSocket:我得到

final Switch connectionSwitch = (Switch) findViewById(R.id.connectionSwitch); 
connectionSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    if(isChecked) { 
     new Thread(){ 
      public void run() { 
       try { 
        serverSocket = new ServerSocket(port); 
        socket = serverSocket.accept(); 
        outToServer = new DataOutputStream(socket.getOutputStream()); 
       } catch (UnknownHostException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       while(connectionSwitch.isChecked()) { 

        myPacket[0] = (byte) 0xAA; 
        myPacket[1] = (byte) 0x01; 
        myPacket[2] = (byte) (fanFrontSpeed/256); 
        myPacket[3] = (byte) (fanFrontSpeed%256); 
        myPacket[4] = (byte) (fanLeftSpeed/256); 
        myPacket[5] = (byte) (fanLeftSpeed%256); 
        myPacket[6] = (byte) (fanRightSpeed/256); 
        myPacket[7] = (byte) (fanRightSpeed%256); 

        try { 
         outToServer.write(myPacket,0,8); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 

       try { 
        socket.close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     }.start(); 
    } 
} 
}); 

的错误是:

FATAL EXCEPTION: Thread-4487 
java.lang.NullPointerException 
+0

你能通过logcat获得更具体的错误文本吗?否则,我们只能猜测什么可能是空的。 – ryanbwork 2012-08-14 00:06:33

+0

我一直在搞乱它,并且已经解决了outToServer.write(myPacket,0,8)的问题。要么我没有正确使用它(我以前一直在使用正在工作的writeInt),或者我构建myPacket的方式是错误的。 – user1425706 2012-08-14 01:20:19

回答

0

调试这样的事情最简单的方法是通过去一步在执行每一行之前检查是否有空。

例如可能发生什么: 在服务器初始化期间,发生了一些错误,它在UnknownHostException或IOException中被捕获,现在您的代码携带了一个outToServer == null,因为它从未初始化过,并且当它尝试outToServer.write(myPacket,0,8);时,您有一个空指针例外。

但它可能是十亿不同的事情,这只是我能想到的最明显的。