我有简单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);
}发布于 2018-03-07 11:06:41
,正如我在这里看到的,您的响应是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);
}发布于 2018-03-07 10:33:46
您的错误信息描述性不强。但是,我认为您需要在GET请求的头中将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中看到的,您正在接收一个对象数组。我建议使用葛森进行JSON解析。它既简单又易于实现。您需要定义一个类,该类包含数组中对象的字段,该字段在响应中返回。然后,只需使用Gson将JSON数组中的值转换为您创建的特定对象的数组。这是样品。
Gson gson = new Gson();
Data[] dataArray = gson.fromJson(jsonLine, Data[].class);https://stackoverflow.com/questions/49149658
复制相似问题