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

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

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

首先呈现一下错误代码:

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

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

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

------------------------------√//用字符流处理回传

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

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

(二)第二部分为Android端:

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

贴出代码:

public class myJsonArrayRequest extends JsonArrayRequest {
    @Override
    protected Response<JSONArray> 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<JSONArray> 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<JSONObject> listener,
                     Response.ErrorListener errorListener) {
        super(url, jsonRequest, listener, errorListener);
    }

    @Override
    protected Response<JSONObject> 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));
        }
    }
}
*好了,第二篇博客就到这里了
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值