本人在校大三学生,在自学Android,在这里吧学习中遇到的一系列小问题写到这里,希望可以得到答案的同时,也可以给遇到相同问题的各位一个参考。
String up = "username="+""+username+"&password="+""+password; HttpUtil.SendHttpRequestByOK("http://59.75.83.133:8080/RegisterServlet/Register?" + up , new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call,final Response response) throws IOException { String responseString = response.body().string();
…… }
上面的一开始就不多说了,发送了一个HTTP请求,在Response中回调,然后得到response的字符串,这段代码是没有问题的。而如果在得到response之后进行某些操作,可能会出现一些问题。下面这段代码是我修改之前的。
String up = "username="+""+username+"&password="+""+password; HttpUtil.SendHttpRequestByOK("http://59.75.83.133:8080/RegisterServlet/Register?" + up , new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call,final Response response) throws IOException { // String responseString = response.body().string(); final int code = HttpUtil.parseJSONWithJSONObjectGetCode(response.body().string()); final int id = HttpUtil.parseJSONWithJSONObjectGetId(response.body().string());
这个HTTPUtil是我自己写的一个类,里面除了发送请求,还有解析JSON格式数据,code和id是里面的变量,如下所示:
{"code":0,"msg":"注册成功!!","data":{"id":1,"username":"123","password":"123"}}
{"code":-1,"msg":"该账号已存在","data":{"id":0}}
分别是注册成功和已经注册的response。
如果按照下面写,没有将response先打包成字符串,而是将response.body().string()分别赋值给两个方法,会出现APP闪退。
我一开始写的时候没吧code 和 id 写成final,而是写进了runOnUiThread函数中:
这种情况下他不会报错,而是在界面卡顿,以至于后面的toast函数没法打印出语句。runOnUiThread(new Runnable() { @Override public void run() { try { int code = HttpUtil.parseJSONWithJSONObjectGetCode(response.body().string()); int id = HttpUtil.parseJSONWithJSONObjectGetId(response.body().string()); Toast.makeText(RegisterActivity.this,"code is " + code,Toast.LENGTH_SHORT).show();}
而如果像第二种,把他写在runOnUIThread函数外面,整个活动会退出。
最后发现就是因为两次调用了response.body().string();具体为什么应该还需要看源码,有知道的朋友希望可以告诉我一下。