Volley网络框架使用过程中的一些报错解决办法。

今天第一次开始使用Volley网络框架,的确使用十分便利。大致的使用步骤如下:
1.创建一个RequestQueue对象。
2.创建一个StringRequest或者JsonRequest对象
3.将步骤2创建的对象添加到RequestQueue里面
相比于以前使用HttpUrlConnection和HttpClient的方法,的确减少了不少的代码工作量,不过即便如此简单的使用步骤,仍然出现不少令人头疼的问题。
且看下面代码:

JsonObjectRequest jsonObjectRequest=new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html",null,
                new Response.Listener<JSONObject>(){
                    public void onResponse(JSONObject response){
                        Log.d("TAG",response.toString());
                    }
                },new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.e("TAG",volleyError.getMessage(),volleyError);
            }
        });
        mQueue.add(jsonObjectRequest);

这里简单new出了一个JsonObjectRequest对象,url地址是中国天气网提供的一个查询天气信息的接口,期待在logcat中打印出来。没想到居然给我报错:

07-29 13:09:57.642 11615-11615/com.example.leslie.volleytest E/TAG: null
                                                                    com.android.volley.AuthFailureError
                                                                        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:142)
                                                                        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)

AuthFailureError我查了一下,是权限错误,访问了不可用的资源被服务器拒绝,这样应该是我提供的URL地址有问题了,果然,我复制粘贴到浏览器显示403错误。
这里写图片描述

然后我就在网上找了个能够正常打开并返回Json数据的url:
http://www.weather.com.cn/data/cityinfo/101010100.html
打开网页返回的确实是json数据:
这里写图片描述

然后我心想这下该没问题了吧?没想到又出现了新的错误:

07-30 00:15:54.499 1869-5984/com.example.leslie.volleytest E/Volley: [83] BasicNetwork.performRequest: Unexpected response code 200 for http://www.weather.com.cn/data/sk/101010100.html
07-29 13:30:21.151 7357-7357/com.example.leslie.volleytest E/TAG: null
                                                                  com.android.volley.NetworkError
                                                                      at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:148)
                                                                      at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)

NetWorkError和No Connection Error有什么不同了?Google一下发现一条解释如下:
No connection Error - you doesn’t have a data connection and wi-fi Connection

Network Error - you may login with some wi-fi which is under firewall means you are connected but not able to transfer data. you are allowed to transfer only even after login manually with the firewall.Before login to firewall the network error is displayed

翻译一下就是:
No connection Error 就是你没有数据连接或者WiFi连接。
NetWork Error 就像 你可能登录上某些防火墙wifi,这意味着你能连上wifi但是不能传输数据。只有手动登录防火墙你才可以传输数据,但在此之前,NetWork错误就会出现。

看到一篇文章

http://www.cnblogs.com/xiaorenwu702/p/4541950.html
里面介绍了常见的一些VolleyError出现的原因,现在引用如下:
正如前面代码看到的,在创建一个请求时,需要添加一个错误监听onErrorResponse。如果请求发生异常,会返回一个VolleyError实例。
以下是Volley的异常列表:
1.AuthFailureError:如果在做一个HTTP的身份验证,可能会发生这个错误。
2.NetworkError:Socket关闭,服务器宕机,DNS错误都会产生这个错误。
3.NoConnectionError:和NetworkError类似,这个是客户端没有网络连接。
4.ParseError:在使用JsonObjectRequest或JsonArrayRequest时,如果接收到的JSON是畸形,会产生异常。
5.SERVERERROR:服务器的响应的一个错误,最有可能的4xx或5xx HTTP状态代码。
6.TimeoutError:Socket超时,服务器太忙或网络延迟会产生这个异常。默认情况下,Volley的超时时间为2.5秒。如果得到这个错误可以使用RetryPolicy。

按照上面的说法,那应该是服务器的原因了,我猜想还是URL的原因,换成顺丰的物流接口就可以正常解析了:

http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号 

可是我搞不懂,为什么返回码是200还报错,在网上查到说是返回码是200表示服务器正常接受请求并返回,百度了很久,没有一个满意的答案。都是些似是而非的回答。

不过据我以上的分析和推测,200应该是Url没问题的,浏览器能打开。但是模拟器仍然出现Network Error我认为是模拟器防火墙把网址屏蔽了。如果有高手把这个问题解决了,欢迎留言。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值