Volley JsonObjectRequest 错误响应
Volley JsonObjectRequest Error response
我有 class 和简单的 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);
}
您的错误消息描述性不强。但是,我认为您需要在 GET 请求的 header 中将 content-type
设置为 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 请求返回的 JSON。正如我从您的回复 JSON 中看到的,您收到了一个 object 数组。我想建议使用 Gson 进行 JSON 解析。它简单易行。您需要在响应中返回的数组中定义一个 class,其中包含 object 的字段。然后只需使用 Gson 将 JSON 数组中的值转换为您创建的特定 object 的数组。这是一个示例。
Gson gson = new Gson();
Data[] dataArray = gson.fromJson(jsonLine, Data[].class);
正如我在这里看到的,您的回复采用 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);
}
我有 class 和简单的 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);
}
您的错误消息描述性不强。但是,我认为您需要在 GET 请求的 header 中将 content-type
设置为 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 请求返回的 JSON。正如我从您的回复 JSON 中看到的,您收到了一个 object 数组。我想建议使用 Gson 进行 JSON 解析。它简单易行。您需要在响应中返回的数组中定义一个 class,其中包含 object 的字段。然后只需使用 Gson 将 JSON 数组中的值转换为您创建的特定 object 的数组。这是一个示例。
Gson gson = new Gson();
Data[] dataArray = gson.fromJson(jsonLine, Data[].class);
正如我在这里看到的,您的回复采用 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);
}