2010-05-15 68 views
0

我有一个与服务器(用java编写)通信的android应用程序。 这两部分之间我建立了一个Socket连接并想发送数据。 我遇到的问题是,有时对于某些用户来说,到达服务器的信息为空。接收null(Android)的套接字

此作品(适用于所有手机,所有用户):
服务器:

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(); 
} 

Clien T:

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(); 

有时,在第二种情况下,名称,MSG和版本(字符串试验)是在服务器侧空。捕获被触发,因为测试为空。
curversion,一个是整数,其余都是字符串。

任何想法?

回答

0

故障是在别的地方,错过了许可。不,它不是INTERNET,而是READ_PHONE_STATE。当READ_PHONE_STATE不可用时,某些电话上的某些版本的getDeviceId()将返回null。

1

糟糕的编码在这里。每次调用readLine()时,都必须立即测试结果为null,如果为true,则停止读取并关闭流。

这个特殊情况是Scanner的工作。