2014-08-27 56 views
-1

我做android应用程序,我有java.lang.NullPointerException与此代码。 Java服务器在计算机上。感谢帮助。Android/Java的Java套接字oputput或输入流为空

try { 
    ok.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try { 
       Socket socket; 
       socket = new Socket("192.168.0.179", 5450); 
       os = new PrintStream(socket.getOutputStream()); 
       is = new DataInputStream(socket.getInputStream()); 
       in = is.readLine().trim(); 

       if(in == "hello") { 
        os.print(edit.getText().toString()); 
        os.flush(); 
        Log.d("LoL", in); 
        Log.d("LoL", edit.getText().toString()); 
        in = is.readLine().trim(); 
        edit.setText(in); 
        os.close(); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
} catch (Exception e) { 
    Log.d("LoL",e.toString()); 
} 
+1

请发布您的例外堆栈跟踪 – AlexVogel 2014-08-27 09:26:47

+0

发布stactrace广告突出显示引起异常的行。是否编辑== null? 'ok == null'? – BackSlash 2014-08-27 09:27:50

+0

添加您的崩溃日志 – 2014-08-27 09:32:44

回答

1

in == "hello"表达将始终返回false,因为你要在内容的字符串in"hello"比较;该表达式检查它们是否是同一个对象,并且这绝不会发生。对于任何非基元类型的字符串,我们应该写"hello".equals(in)。 (您也可以编写in.equals("hello"),但后一种形式可以防止另一种可能的空指针异常)

由于该表达式将始终返回false,因此if块永远不会执行。因此,NPE可能只发生在两个地方:

  • in ok.setOnClickListener:如果ok变量为空,例如,没有初始化,调用任何方法都会导致NPE;
  • in in = is.readLine().trim();:如果InputStream为空(例如没有从服务器获取数据或EOF)is.readLine()将返回null,并且在空对象上调用trim()将导致NPE。

顺便提一句,InputStream.readLine()已弃用,请改用BufferedReader。这是解释here

+0

错误仍然发生,但谢谢。 – 2014-08-27 16:53:55