views:

93

answers:

2

I have a android app that is communicating with a server (written in java). Between these two parts I have established a Socket connection and want to send data. The problem I am having is that sometimes, for some users, the information that reaches the server is null.

This works (for all phones, all users):
Server:

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

Client:

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

This does not work (for some users):
Server:

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

Client:

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

Sometimes, in the second case, the name, msg, and version (the string test) are null at the server side. The catch is triggered because test is null.
curversion,a are ints, the rest are strings.

Any ideas?

A: 

The fault was somewhere else, missed a permission. No, it was not INTERNET, it was READ_PHONE_STATE. getDeviceId() returns null for some versions on some phones when READ_PHONE_STATE is not available.

Henrik
A: 

Poor coding here. Every time you call readLine() you must immediately test the result for null, and if true stop reading and close the stream.

This particular situation is a job for Scanner.

EJP