解决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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章