我有一个与服务器通信的Android应用程序(用Java编写)。
在这两部分之间,我建立了一个Socket连接,并希望发送数据。
我遇到的问题是,对于某些用户而言,有时到达服务器的信息为空。
这适用于(对于所有电话,所有用户):
服务器:
int a = Integer.parseInt(in.readLine());
int b = Integer.parseInt(in.readLine());
int c = Integer.parseInt(in.readLine());
int d = Integer.parseInt(in.readLine());
String checksum = in.readLine();
String model = in.readLine();
String device = in.readLine();
String name = in.readLine();
客户:
out.println(a);
out.println(b);
out.println(c);
out.println(d);
out.println(hash);
out.println(Build.MODEL);
out.println(Build.DEVICE);
String name = fixName();
out.print(name);
out.flush();
这不起作用(对于某些用户):
服务器:
int a = Integer.parseInt(in.readLine());
String checksum = in.readLine();
String model = in.readLine();
String device = in.readLine();
String name = in.readLine();
String msg = in.readLine();
int version = -1;
String test = "hej";
try{
test = in.readLine();
version = Integer.parseInt(test);
}catch(Exception e){
e.printStackTrace();
}
客户:
out.println(a);
out.println(hash);
out.println(Build.MODEL);
out.println(Build.DEVICE);
String name = fixName();
if(name == null) name = "John Doe";
out.println(name);
String msg = fixMsg();
if(msg == null) name = "nada";
out.println(msg);
out.println(curversion);
out.flush();
有时,在第二种情况下,服务器端的名称,消息和版本(字符串测试)为空。由于测试为空,因此触发了捕获。
curversion,一个是整数,其余的是字符串。
有任何想法吗?
最佳答案
这里的编码不良。每次调用readLine()时,必须立即测试结果是否为null,如果为true,则停止读取并关闭流。
这种特殊情况是Scanner的工作。