菜鸟Android开发起步遇到的小问题————OKHttp回调时请求后出现的问题

本人在校大三学生,在自学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函数中:

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();
}
这种情况下他不会报错,而是在界面卡顿,以至于后面的toast函数没法打印出语句。


而如果像第二种,把他写在runOnUIThread函数外面,整个活动会退出。


最后发现就是因为两次调用了response.body().string();具体为什么应该还需要看源码,有知道的朋友希望可以告诉我一下。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值