所以我看了几个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,因此Request不应自行将内容类型设置为application/json吗?我希望通过将content-type设置为application/json来获得正确的响应类型。

最佳答案

您可以在请求末尾和;之前调用这些方法

    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();
        }
    };

09-13 00:07