以下皆以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)); } } }*好了,第二篇博客就到这里了