小追兵專(zhuān)欄
現(xiàn)在Android開(kāi)發(fā)的網(wǎng)絡(luò)請(qǐng)求庫(kù)很多,這里不一一列舉了(原因:別的我沒(méi)用過(guò)显拜,不知道怎么說(shuō),哈哈~)爹袁。
Volley是我們常用的一個(gè)網(wǎng)絡(luò)請(qǐng)求庫(kù)远荠。為什么用Volley?這里不做介紹(原因:別的沒(méi)用過(guò)失息,其實(shí)Volley好在哪里我也不知道譬淳。嘿嘿~)
使用Volley的同學(xué),很容易遇到亂碼問(wèn)題根时,對(duì)不對(duì)瘦赫?我沒(méi)說(shuō)錯(cuò)吧?你遇到了嗎蛤迎?
亂碼問(wèn)題的產(chǎn)生原因确虱,想必大家都知道顽馋!這里我不多說(shuō)斯够。(原因:我怕說(shuō)了也白說(shuō),其實(shí)我怕我說(shuō)不清除烛芬,嘎嘎~)
來(lái)辆童,讓我們看看遇到亂碼問(wèn)題怎么解決吧宜咒!
網(wǎng)絡(luò)請(qǐng)求的時(shí)候你怎么用的,是這樣用的嗎把鉴?
//網(wǎng)絡(luò)請(qǐng)求時(shí)故黑,new 一個(gè)JsonObjectRequest對(duì)象,
JsonObjectRequest jbr=new JsonObjectRequest(url, jsonRequest, listener, errorListener);
可是返回的數(shù)據(jù)亂碼了嗎庭砍?沒(méi)亂场晶?這可是不代表你干什么都不亂啊。用他做第三方登錄(這里指微信登錄)試試怠缸,看亂不亂诗轻。
亂了?我們看看怎么處理揭北。
復(fù)寫(xiě)這個(gè)Volley中JsonObjectRequest這個(gè)類(lèi)扳炬,寫(xiě)個(gè)自定義類(lèi)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;
//如果返回頭中沒(méi)有Charset吏颖,默認(rèn)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));
}
}
}
上面我們?cè)趐arseNetworkResponse 中制定編碼為“UTF-8”,看看恨樟,你的亂碼問(wèn)題是不是解決了呢半醉?
當(dāng)然現(xiàn)在你不該new JsonObjectRequest,應(yīng)該換成這樣請(qǐng)求網(wǎng)絡(luò)了:
CharsetJsonRequest jbr=new CharsetJsonRequest(url, jsonRequest, listener, errorListener);
不知道你的問(wèn)題解決了沒(méi)劝术。
特此聲明奉呛,這個(gè)方法是從劉老師那里學(xué)來(lái)的。
csdn博客:
http://blog.csdn.net/itheima_mxh/article/details/48575339