繁体   English   中英

从JSON响应中获取一个数组列表

[英]Get an arraylist from JSON response

我有一个节点js API,我正在使用Volley将JSON响应从其中获取到android,该API返回选择查询的结果,而我需要在android部分的对象“ News”的Arraylist中获取此结果。 这是节点js API的一部分:

    connection.query("SELECT * FROM news",
        function(err,rows,fields){
       if (!err){
        if (rows.length > 0){
            res.setHeader('Content-Type', 'application/json');
            res.send(rows);
        }
        else{
            var error = {msg: "news is empty"}
            res.send(error);
        }
    }

});

这是android部分,我需要从arraylist中的json响应中获取“行”:

  String URLnews = "http://10.0.2.2:3000/getnews";
        RequestQueue requestQueueNews = Volley.newRequestQueue(this);
        JsonObjectRequest objectRequestNews = new JsonObjectRequest(
                Request.Method.GET,
                URLnews,
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject responsenews) {
                        Log.e("news length",responsenews.toString());
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("Rest Response",error.toString());
                    }
                }
        );


        requestQueueNews.add(objectRequestNews);

这是JSON响应:

[
    {"idnews":1,"content":"news first news","image":"img"}, 
    {"idnews":2,"content":"news 2","image":"img2"}
]

请注意,API正常工作,它返回结果,但是作为android中打印的String,但是我需要在arraylist中获取分隔对象中的每一行,这可能吗?

因为您的JSON对象位于JSON数组中,所以您需要将JsonObjectRequest更改为JsonArrayRequest。

new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray responsenews) {
                    try {
                          for (int i = 0; i < responsenews.length(); i++) {
                              JSONObject object = responsenews.getJSONObject(i);
                              int id = object.getInt("idnews");
                              String content = object.getString("content");
                              String image = object.getString("image");
                        }
                    }catch (JSONException e) {
                         e.printStackTrace();
                    }
                }
            }

在这里,您缺少的是从JSON进行的转换。 例如,您可以使用GSON来完成工作。

new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray responsenews) {
          Log.e("news length",responsenews.toString());
          Gson gson = new Gson();
          Type type = new TypeToken<List<News>>() {}.getType();
          List<News> news = gson.fromJson(responsestr, listType);
       }
    },

您将需要定义News类,仅此而已。

注意:答案已更新,以反映valentino正确注意到的事实,即应该是JSONArray请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM