今天遇到一个奇怪的问题,就是换了请求的域名之后,服务器反馈的数据无法解析!从上面的报错可以很容易的看出是做值  无法转换为JSONObject
但是这个出现这个错误却很奇怪:
1.Android端:我只换了一个域名地址什么也没改,以前的地址可以正常访问
2.后端:我是复制的代码,而且是在同一个服务器上面,只是绑定了一个新域名中间交涉
我把请求地址发给后端,通过浏览器访问这个数据,能显示正常数据,但是通过F12检查时,发现返的数据头部大括号{被解析成了乱码!于是我就认为是服务端的错误,他自己也觉得奇怪,找错误去了!他发现只要改回以前的域名就没有错误了!第二天,
后端处理迟迟没有结果,而且苹果端能正常访问数据!我就只有再次去看Volley框架,我是根据官方来封装了返回结果的!
public class NormalPostRequest extends Request<JSONObject> {
private Map<String, String> mMap;
private Response.Listener<JSONObject> mListener;
public NormalPostRequest(String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener, Map<String, String> map) {
super(Method.POST, url, errorListener);
mListener = listener;
mMap = map;
}
//mMap是已经按照前面的方式,设置了参数的实例,通过此方法将参数加入进去
@Override
protected Map<String, String> getParams() throws AuthFailureError { return mMap; }
//此处因为response返回值需要json数据,和JsonObjectRequest类一样即可
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
L.i("jsonString=="+jsonString);
return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
@Override
protected void deliverResponse(JSONObject response) {
mListener.onResponse(response);
}}
我在这里打印了jsonString,发现这里的数据确实有乱码!于是我在这里将
String jsonString =
new String(response.data, HttpHeaderParser.parseCharset(response.headers));```
替换为
String jsonString = new String(response.data, "utf-8");```
居然就可以了!
可以看出,使用HttpHeaderParser.parseCharset(response.headers)来设置编码是不对的,至少不能兼容所有!困扰两天的问题终于解决了,特此记录下来,希望对有同样奇葩问题的同学有所帮助!