現在Android開發的網絡請求庫很多,這裏不一一列舉了(原因:別的我沒用過,不知道怎麼說,哈~哈~~)。
Volley是我們常用的一個網絡請求庫。爲什麼用Volley?這裏不做介紹(原因:別的沒用過,其實Volley好在哪裏我也不知道。嘿~嘿~~)
使用Volley的同學,很容易遇到亂碼問題,對不對?我沒說錯吧?你遇到了嗎?
亂碼問題的產生原因,想必大家都知道!這裏我不多說。(原因:我怕說了也白說,其實我怕我說不清除,嘎~嘎~~)
來,讓我們看看遇到亂碼問題怎麼解決吧!
網絡請求的時候你怎麼用的,是這樣用的嗎?
//網絡請求時,new 一個JsonObjectRequest對象,
JsonObjectRequest jbr=new JsonObjectRequest(url, jsonRequest, listener, errorListener);
可是返回的數據亂碼了嗎?沒亂?這可是不代表你幹什麼都不亂啊。用他做第三方登錄(這裏指微信登錄)試試,看亂不亂。
亂了?我們看看怎麼處理。
複寫這個Volley中JsonObjectRequest這個類,寫個自定義類CharsetJsonRequest如下:
package com.xxxxx.net;
import java.io.UnsupportedEncodingException;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonObjectRequest;
//如果返回頭中沒有Charset,默認UTF-8
public class CharsetJsonRequest extends JsonObjectRequest {
public CharsetJsonRequest(String url, JSONObject jsonRequest,
Listener<JSONObject> listener, ErrorListener errorListener) {
super(url, jsonRequest, listener, errorListener);
}
public CharsetJsonRequest(int method, String url, JSONObject jsonRequest,
Listener<JSONObject> listener, ErrorListener errorListener) {
super(method, url, jsonRequest, listener, errorListener);
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, "UTF-8");
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));
}
}
}
上面我們在parseNetworkResponse 中制定編碼爲“UTF-8”,看看,你的亂碼問題是不是解決了呢?
當然現在你不該new JsonObjectRequest,應該換成這樣請求網絡了:
CharsetJsonRequest jbr=new CharsetJsonRequest(url, jsonRequest, listener, errorListener);
不知道你的問題解決了沒。
特此聲明,這個方法是從劉老師那裏學來的。