我目前正在使用JSON-io库。我创建了一个桌面应用程序,当一个人想要在系统中登录时,用他的用户名和密码发送一个JSONObject。然后,如果允许该人,则服务器发送回响应(也是JSONObject)。直到这里一切正常。 现在我想制作一个Android应用程序。我使用与之前相同的代码进行登录,但应用程序崩溃了。 登录代码是从AsyncTask启动的,我将访问Internet的权限授予Manifest。
我执行了一些测试,并且发生JSONWriter的方法写入“删除”我的JSON,因为在服务器端他收到了这个:{}。我试图在服务器端硬编码JSONObject(服务器的代码工作正常,因为我们可以使用桌面应用程序)但这次android App上的readObject也接收{}。 我们尝试发送jsonObject.toString(),这次它起作用(除了服务器没有配置为处理字符串)。
有谁知道为什么在android上两个方法write和readObject都删除了JSON?
谢谢。
编辑:
这里我写的代码: 在Android应用程序
protected Boolean doInBackground(Void... params) {
// 3 : create a JSON object and send it to server for verification
JSONObject loginJS = new JSONObject();
try {
loginJS.put("type", Type.LOGIN); // Type is an enum
loginJS.put("username", userName);
loginJS.put("hash", mPassword);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
User user = new User();
System.out
.println("User created and ready to connect to the spu for login");
user.connexionToSPU(); // This method works
System.out.println("LoginJS = "+loginJS.toString()); At this point the print of the JSON is fine we have {"type":"Login", ....}
user.sendToSPU(loginJS); //This is where there's a problem
// 4 : wait response
JSONObject loginResponseJS = user.receiveFromSPU(); // And when i hard code the JSON on the server side receiveFromSPU get a empty JSON
方法connexionToSPU:
public void connexionToSPU() {
jswSPU = null;
jsrSPU = null;
Socket socket = null;
try {
socket = new Socket(prop.readPropertiesXML("IP_adress_server"),
Integer.parseInt(prop.readPropertiesXML("port_server")));
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
jswSPU = new JsonWriter(socket.getOutputStream());
jsrSPU = new JsonReader(new BufferedInputStream(socket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sendToSPU方法
public void sendToSPU(JSONObject json) {
try {
jswSPU.write(json);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ReceiveFromSPU方法
public JSONObject receiveFromSPU() {
JSONObject json = null;
try {
json = (JSONObject) jsrSPU.readObject();
System.out.println("JSON FROM THE SERVER : "+json.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
希望它足够清楚。 谢谢