Android UTF-8 JSONObject在截击中请求支持
我有一个utf-8 json文件 如何使用utf-8支持打印它Android UTF-8 JSONObject在截击中请求支持,android,json,android-volley,Android,Json,Android Volley,我有一个utf-8 json文件 如何使用utf-8支持打印它 output = (TextView) view.findViewById(R.id.jData); JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, loginURL, null, new Response.Listener<JSONObject>() { @Overri
output = (TextView) view.findViewById(R.id.jData);
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, loginURL, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try{
JSONArray ja = response.getJSONArray("posts");
for(int i=0; i < ja.length(); i++){
JSONObject jsonObject = ja.getJSONObject(i);
String title = jsonObject.getString("title");
String text = jsonObject.getString("text");
data += "Blog Number "+(i+1)+" \n title= "+title +" \n text= "+ text +" \n\n\n\n ";
}
output.setText(data);
}catch(JSONException e){e.printStackTrace();}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley","Error");
}
}
);
requestQueue.add(jor);
我更改了UTF-8上的Android文件编码设置,但没有任何更改。如何解决此问题?您可以通过重写JsonObjectRequest类的
parseNetworkResponse
方法来解决此问题。首先创建一个扩展JsonObjectRequest的新类:
public class Utf8JsonObjectRequest extends JsonObjectRequest {
public Utf8JsonObjectRequest(int method,
String url,
Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
"UTF-8"
);
return Response.success(
new JSONObject(json),
HttpHeaderParser.parseCacheHeaders(response)
);
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}
Utf8JsonObjectRequest jor = new Utf8JsonObjectRequest(
Request.Method.GET,
loginURL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//...
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley","Error");
}
}
);
公共类Utf8JsonObjectRequest扩展了JsonObjectRequest{
公共Utf8JsonObjectRequest(int方法,
字符串url,
回应,听众,
Response.ErrorListener(错误监听器){
super(方法、url、侦听器、errorListener);
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
试一试{
String json=新字符串(
答复.数据,
“UTF-8”
);
回答:成功(
新的JSONObject(json),
HttpHeaderParser.parseCacheHeaders(响应)
);
}捕获(不支持的编码异常e){
返回Response.error(新的ParseError(e));
}捕获(JsonSyntaxException e){
返回Response.error(新的ParseError(e));
}
}
}
然后使用新类代替JsonObjectRequest:
public class Utf8JsonObjectRequest extends JsonObjectRequest {
public Utf8JsonObjectRequest(int method,
String url,
Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
"UTF-8"
);
return Response.success(
new JSONObject(json),
HttpHeaderParser.parseCacheHeaders(response)
);
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}
Utf8JsonObjectRequest jor = new Utf8JsonObjectRequest(
Request.Method.GET,
loginURL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//...
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley","Error");
}
}
);
Utf8JsonObjectRequest jor=新的Utf8JsonObjectRequest(
Request.Method.GET,
罗吉努尔,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
//...
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“截击”、“错误”);
}
}
);
您可以通过重写JsonObjectRequest类的parseNetworkResponse
方法来实现这一点。首先创建一个扩展JsonObjectRequest的新类:
public class Utf8JsonObjectRequest extends JsonObjectRequest {
public Utf8JsonObjectRequest(int method,
String url,
Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
"UTF-8"
);
return Response.success(
new JSONObject(json),
HttpHeaderParser.parseCacheHeaders(response)
);
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}
Utf8JsonObjectRequest jor = new Utf8JsonObjectRequest(
Request.Method.GET,
loginURL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//...
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley","Error");
}
}
);
公共类Utf8JsonObjectRequest扩展了JsonObjectRequest{
公共Utf8JsonObjectRequest(int方法,
字符串url,
回应,听众,
Response.ErrorListener(错误监听器){
super(方法、url、侦听器、errorListener);
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
试一试{
String json=新字符串(
答复.数据,
“UTF-8”
);
回答:成功(
新的JSONObject(json),
HttpHeaderParser.parseCacheHeaders(响应)
);
}捕获(不支持的编码异常e){
返回Response.error(新的ParseError(e));
}捕获(JsonSyntaxException e){
返回Response.error(新的ParseError(e));
}
}
}
然后使用新类代替JsonObjectRequest:
public class Utf8JsonObjectRequest extends JsonObjectRequest {
public Utf8JsonObjectRequest(int method,
String url,
Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
"UTF-8"
);
return Response.success(
new JSONObject(json),
HttpHeaderParser.parseCacheHeaders(response)
);
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}
Utf8JsonObjectRequest jor = new Utf8JsonObjectRequest(
Request.Method.GET,
loginURL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//...
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley","Error");
}
}
);
Utf8JsonObjectRequest jor=新的Utf8JsonObjectRequest(
Request.Method.GET,
罗吉努尔,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
//...
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“截击”、“错误”);
}
}
);
您能提供更多信息吗?我是android新手,无法使用此代码。(我的原始代码在片段类的onCreateView()中。你能提供更多信息吗?我是android新手,无法使用此代码。(我的原始代码在片段类的onCreateView()中。)。