从排序中的响应中获取标题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从排序中的响应中获取标题相关的知识,希望对你有一定的参考价值。

我正在使用Volley,我想向服务器发出请求,该服务器在“可变层”中返回一个JSON(我可以在Web浏览器中看到它)。我的问题是服务器还返回我需要在我的应用程序中获取的标头信息,但我无法从请求中获取标头。

我已经搜索了很长时间但我没有找到任何有用的东西(只是向请求标题添加数据,但没有从标题的响应中获取数据)

谁知道如何实现?

答案

要获取标题,您需要在请求中覆盖parseNetworkResponse()

例如JsonObjectRequest

public class MetaRequest extends JsonObjectRequest {

    public MetaRequest(int method, String url, JSONObject jsonRequest, Response.Listener
            <JSONObject> listener, Response.ErrorListener errorListener) {
        super(method, url, jsonRequest, listener, errorListener);
    }

    public MetaRequest(String url, JSONObject jsonRequest, Response.Listener<JSONObject>
            listener, Response.ErrorListener errorListener) {
        super(url, jsonRequest, listener, errorListener);
    }

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
            JSONObject jsonResponse = new JSONObject(jsonString);
            jsonResponse.put("headers", new JSONObject(response.headers));
            return Response.success(jsonResponse,
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }
}
另一答案

这是使用JSONArray数据和标头的示例。

首先创建自己的自定义请求类型实现:

public class JsonRequest extends JsonObjectRequest {

    public JsonRequest(int method, String url, JSONObject jsonRequest, Response.Listener
            <JSONObject> listener, Response.ErrorListener errorListener) {
        super(method, url, jsonRequest, listener, errorListener);
    }

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));

            JSONObject jsonResponse = new JSONObject();
            jsonResponse.put("data", new JSONArray(jsonString));
            jsonResponse.put("headers", new JSONObject(response.headers));

            return Response.success(jsonResponse,
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }
}

并在您的请求代码中:

JsonRequest request = new JsonRequest
        (Request.Method.POST, URL_API, payload, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray data = response.getJSONArray("data");
                    JSONObject headers = response.getJSONObject("headers");
                } catch (JSONException e) {
                    Log.e(LOG_TAG, Log.getStackTraceString(e));
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(LOG_TAG, Log.getStackTraceString(error));
            }
        });

请参阅Volley文档Implementing a Custom Request中有关实现自定义请求的更多信息。

以上是关于从排序中的响应中获取标题的主要内容,如果未能解决你的问题,请参考以下文章

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段

如何从Android片段中的相机获取图像

从图库中获取图像以在片段中的图像视图中设置? [复制]

如何从选项卡片段中的 AsyncTask Resftful WS 加载批量数据

如何从 Firebase 获取数据到 Recyclerview 中的片段?

如何从该片段中的 onItemSelectedListener 中获取微调器单击的项目?