Розетки получающие ноль (Android) - PullRequest
1 голос
/ 15 мая 2010

У меня есть приложение для 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, a - целые числа, остальные - строки.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 мая 2010

Плохое кодирование здесь. Каждый раз, когда вы вызываете readLine (), вы должны немедленно проверить результат на нулевое значение, а если true, прекратить чтение и закрыть поток.

Эта конкретная ситуация - работа для Сканера.

0 голосов
/ 15 мая 2010

Ошибка была где-то еще, пропустил разрешение. Нет, это был не ИНТЕРНЕТ, а READ_PHONE_STATE. getDeviceId () возвращает null для некоторых версий на некоторых телефонах, когда READ_PHONE_STATE недоступен

...