解決Volley亂碼問題

現在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);

不知道你的問題解決了沒。

特此聲明,這個方法是從劉老師那裏學來的。

簡書:
http://www.jianshu.com/p/e51cc6eb012f?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-timeline&from=timeline&isappinstalled=1

再少的打賞,也是一種鼓勵

這裏寫圖片描述

發佈了27 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章