首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截击JsonObjectRequest误差响应

截击JsonObjectRequest误差响应
EN

Stack Overflow用户
提问于 2018-03-07 10:31:04
回答 2查看 2.8K关注 0票数 0

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

代码语言:javascript
复制
Volley: [2] 2.onErrorResponse: Error:

所以我不知道到哪里去找个解决办法

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-07 11:06:41

,正如我在这里看到的,您的响应是JsonArray格式的。因此,请尝试使用下面的

代码语言:javascript
复制
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);
}
票数 2
EN

Stack Overflow用户

发布于 2018-03-07 10:33:46

您的错误信息描述性不强。但是,我认为您需要在GET请求的头中将content-type设置为application/json。在创建请求时重写getHeaders函数。下面是一个java示例。

代码语言:javascript
复制
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数组中的值转换为您创建的特定对象的数组。这是样品。

代码语言:javascript
复制
Gson gson = new Gson();
Data[] dataArray = gson.fromJson(jsonLine, Data[].class);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49149658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档