【问题标题】:Android-Volley : set HTTP Header for JsonArrayRequestAndroid-Volley:为 JsonArrayRequest 设置 HTTP 标头
【发布时间】:2016-01-07 07:48:47
【问题描述】:

所以我已经看到了几个 JsonObjectRequests 示例,其中添加了此代码

        @Override
        public String getBodyContentType() {
            return "application/json";
        }

有时这个代码已经被使用了

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            return headers;
        }

无论哪种方式,它总是与 JsonObjectRequest 结合使用。我真的不知道在哪里添加我的 JsonArrayRequest 中的方法的 @Override。这就是我的 JsonArrayRequest 的样子

JsonArrayRequest localJReq = new JsonArrayRequest(localURL,
      new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response){
            try{
                for (int i=0; i < response.length(); i++)
                {
                    JSONObject jsonObject = response.getJSONObject(i);
                    String title = jsonObject.getString("Title");
                    data += "Beschreibung: "+title+"\n\n\n";
                }
                output.setText(data);
            }catch (JSONException e){
                e.printStackTrace();
            }

        }
    },
            new Response.ErrorListener(){
                @Override
                public void onErrorResponse(VolleyError error){
                    error.printStackTrace();
                    Toast.makeText(MainActivity.this, "No more Items Available",
                          Toast.LENGTH_LONG).show();
                }
    });

我尝试将它添加到 {} 中,就在最后一个关闭 ) 后面,但这没有用。我试着把它放在Response.Listener 里面也没有用。所以我有点困惑。

无论如何,我认为我正在制作 JsonArrayRequest 真的很奇怪,但由于我的 REST API 接受 HTML 和 JSON 作为响应,所以 Volley 似乎得到的是 HTML 响应而不是 JSON。这使我的应用程序中没有任何物品。这不是很奇怪吗?由于它是 JsonRequest,请求不应该自行将内容类型设置为 application/json 吗?我希望通过将内容类型设置为 application/json 来获得正确的响应类型。

【问题讨论】:

  • 尝试在 getHeaders() 中添加带有“application/json”值的“Accept”标头
  • @BNK 成功了!!!你是救命恩人!!!我真是个白痴,我把Content-Typeapplication/json 放在getHeaders() 里面——我所要做的就是把它改成Acceptapplication/json @Override 必须跟在右括号后面就像@bharat 在他的回答中所说的那样,放在花括号内。有趣的是,getHeaders() Override 就足够了,我删除了 getBodyContentType() Override。谢谢!!!
  • Content-Type 用于发送,Accept 用于接收:)

标签: android json http-headers android-volley


【解决方案1】:

您可以在请求结束时调用这些方法并 brefore;

    JsonArrayRequest localJReq = new JsonArrayRequest(localURL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
           }) {//here before semicolon ; and use { }.
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            return super.getHeaders();
        }

        @Override
        public String getBodyContentType() {
            return super.getBodyContentType();
        }
    };

【讨论】:

  • 这很奇怪。我实际上已经尝试过了,但它没有用。我的应用程序仍然收到 HTML 响应而不是 JSON 响应。这就是为什么我首先尝试...
  • 重要的是要指出getHeaders() 必须更改为headers.put("Accept, "application/json"); 我猜getBodyContentType() 可以删除。也许你可以编辑你的答案?并添加这些行以供将来参考..
猜你喜欢
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多