Android 截击JsonObjectRequest错误响应

Android 截击JsonObjectRequest错误响应,android,android-volley,jsonresponse,Android,Android Volley,Jsonresponse,我有一个带有简单Json对象请求的类,这是调用整个请求的方法,在LogCat中我只得到: Volley: [2] 2.onErrorResponse: Error: 所以我不知道去哪里找解决办法 private void getBeerDetails() { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (Request.Method.GET, "h

我有一个带有简单Json对象请求的类,这是调用整个请求的方法,在LogCat中我只得到:

Volley: [2] 2.onErrorResponse: Error:
所以我不知道去哪里找解决办法

private void getBeerDetails() {
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
            (Request.Method.GET,
                    "https://api.punkapi.com/v2/beers/13",
                    null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    try {
                        beerName.setText(response.getString("name"));
                        alc.setText(response.getString("abv"));
                        ibu.setText(response.getString("ibu"));
                        firstBrewed.setText(response.getString("first_brewed"));
                        yeast.setText(response.getString("yeast"));
                        description.setText(response.getString("description"));
                        foodPairing.setText(response.getString("food_pairing"));

                        Picasso.with(getApplicationContext())
                                .load(response.getString("image_url"))
                                .into(beerImageView);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("Error:", error.getMessage());
                }
            });

    requestQueue.add(jsonObjectRequest);
}
private void getBeerDetails(){
JsonObjectRequest JsonObjectRequest=新JsonObjectRequest
(Request.Method.GET,
"https://api.punkapi.com/v2/beers/13",
null,新响应。侦听器(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
beerName.setText(response.getString(“name”));
alc.setText(response.getString(“abv”));
setText(response.getString(“ibu”);
firstbreed.setText(response.getString(“first_breed”);
酵母.setText(response.getString(“酵母”));
description.setText(response.getString(“description”);
foodPairing.setText(response.getString(“食物配对”);
Picasso.with(getApplicationContext())
.load(response.getString(“image\u url”))
.进入(beerImageView);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(“错误:,Error.getMessage());
}
});
add(jsonObjectRequest);
}

您的错误消息描述性不强。但是,我认为您需要在GET请求的标题中将
内容类型设置为
application/json
。创建请求时重写
getHeaders
函数。下面是一个java示例

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d("TAG", response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("TAG", error.getMessage(), error);
        }
    }){

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

您的错误消息描述性不强。但是,我认为您需要在GET请求的标题中将
内容类型设置为
application/json
。创建请求时重写
getHeaders
函数。下面是一个java示例

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d("TAG", response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("TAG", error.getMessage(), error);
        }
    }){

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String, String> params = new HashMap<String, String>();                
        params.put("Content-Type", "application/json");
        return params; 
    } 
};
正如我在这里看到的,您的响应是JsonArray格式的。 因此,请尝试使用下面的

private void getBeerDetails() {
    JsonArrayRequest jsonObjectRequest = new JsonArrayRequest 
            (Request.Method.GET,
                    "https://api.punkapi.com/v2/beers/13",
                    null, new Response.Listener<JSONArray>() {

                @Override
                public void onResponse(JSONArray response) {

                       if(response.length()>0){
                           //make a loop and add item to your list
                           }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("Error:", error.getMessage());
                }
            });

    requestQueue.add(jsonObjectRequest);
}
private void getBeerDetails(){
JsonArrayRequest jsonObjectRequest=新的JsonArrayRequest
(Request.Method.GET,
"https://api.punkapi.com/v2/beers/13",
null,新响应。侦听器(){
@凌驾
公共void onResponse(JSONArray响应){
if(response.length()>0){
//做一个循环并将项目添加到列表中
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(“错误:,Error.getMessage());
}
});
add(jsonObjectRequest);
}
正如我在这里看到的,您的响应是JsonArray格式的。 因此,请尝试使用下面的

private void getBeerDetails() {
    JsonArrayRequest jsonObjectRequest = new JsonArrayRequest 
            (Request.Method.GET,
                    "https://api.punkapi.com/v2/beers/13",
                    null, new Response.Listener<JSONArray>() {

                @Override
                public void onResponse(JSONArray response) {

                       if(response.length()>0){
                           //make a loop and add item to your list
                           }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("Error:", error.getMessage());
                }
            });

    requestQueue.add(jsonObjectRequest);
}
private void getBeerDetails(){
JsonArrayRequest jsonObjectRequest=新的JsonArrayRequest
(Request.Method.GET,
"https://api.punkapi.com/v2/beers/13",
null,新响应。侦听器(){
@凌驾
公共void onResponse(JSONArray响应){
if(response.length()>0){
//做一个循环并将项目添加到列表中
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(“错误:,Error.getMessage());
}
});
add(jsonObjectRequest);
}

show your complete log cat.show your complete log cat.好的,通过这段代码得到的错误消息,我可以看到我试图解析只有一个对象且没有名字的子数组(这是我第一次解析json请求)。我以为它是对象,但如何解析它呢?我明白,我肯定会深入研究这个Gson,谢谢,好吧,通过这段代码我得到的错误消息,我可以看到我试图用一个对象解析son数组,我猜没有名字(这是我第一次解析json请求)。我认为它是对象,但如何解析它呢?我理解,我肯定会深入研究Gson,谢谢,是的,响应是一个数组,但这是一个单个项目的值数组,没有列表,它是啤酒名称、描述、图像url等等。这是一个显示所有数据的单个活动OK,它可以工作,但是必须用数组加载单个对象数据非常不直观,但是感谢您的帮助是的,响应是一个数组,但这是一个单个项目的值数组,没有列表,它是啤酒名称、描述、图像url等等。这是一个显示所有数据的活动OK,它可以工作,但是必须用数组加载单个对象数据是非常不直观的,但是感谢您的帮助