【问题标题】:Volley Content-Type not changing on Certain phonesVolley Content-Type 在某些手机上没有改变
【发布时间】:2018-02-16 15:34:42
【问题描述】:

我正在使用 volley 和 JsonArrayAuthRequest 来获取 api。该 api 可以在我的一些手机上运行,​​但在其他人的手机上却失败了(都使用 api 级别 23,marshmellow)

他们收到的错误消息是“400”请求格式错误。它显示了 Content="text/html;charset=us-ascii"。但是,我知道预期的实体是 json/application。

我尝试覆盖 getHeaders() 和 getBodyContentType().. 有什么想法吗?

    String baseUrl = Constants.constants.getApiUrl() +"Events/";
    String url = baseUrl + query;
    //Log.i("url",url);
    RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
    JsonArrayAuthRequest eventRequest = new JsonArrayAuthRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    ObjectMapper mapper = new ObjectMapper()
                            .disable(FAIL_ON_UNKNOWN_PROPERTIES); // fails if not 1 to 1 mapping
                    ArrayList<Event> data = new ArrayList<>();
                    for (int i = 0; i < response.length(); ++i) {
                        Object res;
                        try {
                            res = response.get(i);
                            //Log.i("res", res.toString()); //grabs the filtered events already
                            Event e = mapper.readValue(res.toString(), Event.class);
                            data.add(e);
                        } catch (Exception e) {
                            Log.d("error", e.toString());
                            return;
                        }
                    }
                    //Log.i("Browse", "got " + Integer.toString(data.size()) + " events!");

                    browse = (BrowseFragment) adapter.getItem(0);
                    browse.setData(data);
                    progressDialog.dismiss();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (error == null || error.networkResponse == null) {
                        Toast toast = Toast.makeText(getApplicationContext(), "No Response from server", Toast.LENGTH_LONG);
                        toast.show();
                        return;
                    }
                    String errorMessage = "Could not stringify errorMessage";
                    try {
                         errorMessage = new String(error.networkResponse.data,"UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    Toast toast = Toast.makeText(getApplicationContext(), error.networkResponse.statusCode + ": " + errorMessage, Toast.LENGTH_LONG);
                    toast.show();

                    progressDialog.dismiss();

                }
            });
    queue.add(eventRequest)
 }


private class JsonArrayAuthRequest extends JsonArrayRequest {
        JsonArrayAuthRequest(String url, Response.Listener<JSONArray> 
listener, Response.ErrorListener errorListener) {
            super(url, listener, errorListener);
        }

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

            SharedPreferences settings = getSharedPreferences("account", MODE_PRIVATE);
            headers.put("Authorization", UserInfo.User.getToken());
            //Log.i("headers",headers.get("Content-Type") + " " + headers.get("Authorization"));
            return headers;
        }
        @Override
        public String getBodyContentType()
        {
            return "application/json; charset=utf-8";
        }
    }

【问题讨论】:

    标签: android api android-volley content-type


    【解决方案1】:

    这不是内容类型错误。真正的错误是 api url 包含一个导致 400 错误的空格。我的手机一定是缓存了以前的网址??不确定..但我一直在寻找这个解决方案的错误方向..

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2012-01-21
      相关资源
      最近更新 更多