我制作了android应用程序,并且我有这个代码的java.lang.NullPointerException。 Java服务器在计算机上。谢谢你的帮助。
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());
}
答案 0 :(得分:1)
in == "hello"
表达式将始终返回false,因为您要比较字符串in
和"hello"
的内容;该表达式检查它们是否是同一个对象,并且永远不会发生。对于像字符串这样的非基本类型,我们应该编写"hello".equals(in)
。 (您也可以编写in.equals("hello")
,但后一种形式可以防止另一种可能的NullPointerException)
由于该表达式将始终返回false,因此if块将永远不会执行。因此,NPE可能只发生在两个地方:
ok.setOnClickListener
:如果ok变量为null,例如未初始化,调用任何方法将导致NPE; in = is.readLine().trim();
:如果InputStream为空(例如,没有来自服务器的数据或EOF)is.readLine()
将返回null,并且对空对象调用trim()
将导致NPE BTW,InputStream.readLine()
已弃用,请改用BufferedReader
。这解释了here。