Android中使用Volley,JsonObjectRequest(JsonArrayRequest)接收到中文乱码完美解决方案(包括android端和服务器servlet端解决方案)

以下皆以JsonArrayRequest举例,(因为我写的时候是用JsonArrayRequest~不过JsonObjectRequest也是一样处理的)

(一)首先服务器端(Servlet):

首先呈现一下错误代码:

-------------------------------X//错误写法

一直以来,我都喜欢用上面的方法,写服务器回传。

但是想要得到中文,必须得用下面一种,字符流的方式来处理。下面为正确写法

Android中使用Volley,JsonObjectRequest(JsonArrayRequest)接收到中文乱码完美解决方案(包括android端和服务器servlet端解决方案)_第1张图片------------------------------√//用字符流处理回传

除此之外,Servlet里还要设定response的编码格式:

--------------√//设置response的编码格式

(二)第二部分为Android端:

我刚遇到中文乱码问题的时候,也去百度了很多种方式,但只有下面这种写法才是真正有效的:

贴出代码:

public class myJsonArrayRequest extends JsonArrayRequest {
    @Override
    protected Response parseNetworkResponse(NetworkResponse response) {
        response.headers.put("HTTP.CONTENT_TYPE", "utf-8");
        try {
            String jsonString = new String(response.data, "utf-8");
            return Response.success(new JSONArray(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            return Response.error(new ParseError(e));
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            return Response.error(new ParseError(e));
        }
    }

    public myJsonArrayRequest(String url, Response.Listener listener, Response
            .ErrorListener errorListener) {
        super(url, listener, errorListener);
    }
}

网上有很多重写的方法,但我只有这一种才奏效。

然后在需要用到JsonArrayRequest的地方,调用自己重写过的myJsonArrayRequest就行了,其他操作不变。

(三)JsonObjectRequest的写法相似,android里重写:

public class myJsonObjectRequest extends JsonObjectRequest {


    public myRequest(int get, String url, JSONObject jsonRequest, Response.Listener listener,
                     Response.ErrorListener errorListener) {
        super(url, jsonRequest, listener, errorListener);
    }

    @Override
    protected Response parseNetworkResponse(NetworkResponse response) {
        response.headers.put("HTTP.CONTENT_TYPE", "utf-8");
        try {
            String jsonString = new String(response.data, "utf-8");
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            return Response.error(new ParseError(e));
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            return Response.error(new ParseError(e));
        }
    }
}
*好了,第二篇博客就到这里了

你可能感兴趣的:(Android中使用Volley,JsonObjectRequest(JsonArrayRequest)接收到中文乱码完美解决方案(包括android端和服务器servlet端解决方案))