2010-05-15 23 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的工作。