Android UTF-8 JSONObject在截击中请求支持

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

我有一个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>() {


                @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()中。)。