今天遇到一個(gè)奇怪的問(wèn)題,就是換了請(qǐng)求的域名之后,服務(wù)器反饋的數(shù)據(jù)無(wú)法解析而账!從上面的報(bào)錯(cuò)可以很容易的看出是做值 ??? 無(wú)法轉(zhuǎn)換為JSONObject
但是這個(gè)出現(xiàn)這個(gè)錯(cuò)誤卻很奇怪:
1.Android端:我只換了一個(gè)域名地址什么也沒(méi)改朽们,以前的地址可以正常訪問(wèn)
2.后端:我是復(fù)制的代碼,而且是在同一個(gè)服務(wù)器上面褐耳,只是綁定了一個(gè)新域名中間交涉
我把請(qǐng)求地址發(fā)給后端,通過(guò)瀏覽器訪問(wèn)這個(gè)數(shù)據(jù)渴庆,能顯示正常數(shù)據(jù)铃芦,但是通過(guò)F12檢查時(shí),發(fā)現(xiàn)返的數(shù)據(jù)頭部大括號(hào){被解析成了亂碼襟雷!于是我就認(rèn)為是服務(wù)端的錯(cuò)誤刃滓,他自己也覺(jué)得奇怪,找錯(cuò)誤去了耸弄!他發(fā)現(xiàn)只要改回以前的域名就沒(méi)有錯(cuò)誤了咧虎!第二天,
后端處理遲遲沒(méi)有結(jié)果计呈,而且蘋(píng)果端能正常訪問(wèn)數(shù)據(jù)砰诵!我就只有再次去看Volley框架,我是根據(jù)官方來(lái)封裝了返回結(jié)果的捌显!
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是已經(jīng)按照前面的方式,設(shè)置了參數(shù)的實(shí)例,通過(guò)此方法將參數(shù)加入進(jìn)去
@Override
protected Map<String, String> getParams() throws AuthFailureError { return mMap; }
//此處因?yàn)閞esponse返回值需要json數(shù)據(jù),和JsonObjectRequest類(lèi)一樣即可
@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茁彭,發(fā)現(xiàn)這里的數(shù)據(jù)確實(shí)有亂碼!于是我在這里將
String jsonString =
new String(response.data, HttpHeaderParser.parseCharset(response.headers));```
替換為
String jsonString = new String(response.data, "utf-8");```
居然就可以了苇瓣!
可以看出尉间,使用HttpHeaderParser.parseCharset(response.headers)來(lái)設(shè)置編碼是不對(duì)的,至少不能兼容所有!困擾兩天的問(wèn)題終于解決了哲嘲,特此記錄下來(lái)贪薪,希望對(duì)有同樣奇葩問(wèn)題的同學(xué)有所幫助!