【问题标题】:Json for loop AndroidJson for 循环 Android
【发布时间】:2015-12-07 04:14:15
【问题描述】:

嗨朋友们很抱歉打扰你,但我在Json 数组上调用 for 循环时遇到问题,我只能显示 2 个数组,但有 3 个数组数据我想创建评论框,就像 Facebook 评论一样我从 3 天开始挣扎 this 是我的 Json 我也想知道如何在 JSons 上使用 arraylist 并使用数组的索引值调用

这是JAVA代码

private void loadevent() {
        SharedPreferences eveid = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE);
        String eventid = eveid.getString("userid", "");
        String url = "http://sampletemplates.net/majority/api.php?action=getEvents&user_id=" + eventid + "&page=1&source=android";
        JsonArrayRequest eventreq = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                try {
                    for (int i = 0; i < response.length(); i++) {
                        JSONObject evntobj = response.getJSONObject(i);
                        CurrentList evtslsts = new CurrentList();
                        evtslsts.setEvid(evntobj.getInt("id"));
                        evtslsts.setEvtitle(evntobj.getString("title"));
                        evtslsts.setEvinfo(evntobj.getString("info"));
                        evtslsts.setEvimage(evntobj.getString("image"));
                        evtslsts.setEvvenue(evntobj.getString("venue"));
                        evtslsts.setEvtime_slot(evntobj.getString("time_slot"));
                        JSONArray cmtarray = evntobj.getJSONArray("comments");
                        for (int j = 0; j < cmtarray.length(); j++) {
                            JSONObject c = cmtarray.getJSONObject(j);
//                            CurrentList commentsslsts = new CurrentList();
                            evtslsts.setEvtuserid(c.getInt("user_id"));
                            evtslsts.setEvtusername(c.getString("user_name"));
                            evtslsts.setEvcomment(c.getString("user_comment"));
                            evtslsts.setTimetaken(c.getString("time"));
//                            cmtslist.add(commentsslsts);
                        }
                        evntlist.add(evtslsts);
                    }
                    eventsAdapter.notifyDataSetChanged();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("res", "Error: " + error.getMessage());
            }
        });
        AppController.getInstance().addToRequestQueue(eventreq);
    }

POJO 类

public class CurrentList {
    private evtime_slot, evtusername, evcomment, timetaken;
    public CurrentList() {
    }
    public CurrentList(String evtusername, String timetaken, String evcomment) {
        this.evtuserid = evtuserid;
        this.evtusername = evtusername;
        this.timetaken = timetaken;
        this.evcomment = evcomment;
    }
    public String getEvcomment() {
        return evcomment;
    }
    public void setEvcomment(String evcomment) {
        this.evcomment = evcomment;
    }

    public String getEvtusername() {
        return evtusername;
    }

    public void setEvtusername(String evtusername) {
        this.evtusername = evtusername;
    }

    public String getTimetaken() {
        return timetaken;
    }

    public void setTimetaken(String timetaken) {
        this.timetaken = timetaken;
    }
}

【问题讨论】:

  • 请具体说明您想做什么或详细描述您的问题
  • 先生,我已经更新了详细信息,请通过 Json,我想要评论框,就像 facebook 评论框先生一样

标签: android json for-loop


【解决方案1】:

在这种情况下,您无法获取 json 数组中的所有 cmets,因为它已被覆盖。把cmets做成对象数组或者数组列表,设置到对象evtslsts中,就可以搞定了

考虑以下代码部分

JSONArray cmtarray = evntobj.getJSONArray("comments");
ArrayList<comment> comments=new ArrayList<>();
for (int j = 0; j < cmtarray.length(); j++) {
    JSONObject c = cmtarray.getJSONObject(j);
    comment com = new comment();
    com.setEvtuserid(c.getInt("user_id"));
    com.setEvtusername(c.getString("user_name"));
    com.setEvcomment(c.getString("user_comment"));
    com.setTimetaken(c.getString("time"));
    comments.add(commentsslsts);
}
evtslsts.setCooments(comments);

这里的comment是一个有comment属性的类

【讨论】:

  • cmets 是 getter 和 setter 属性权限ir
  • cmets 是评论类的arraylist
  • 先生,我已经更新了 POjo 类,请检查一下
  • 这没关系 CurrentList
  • 我得到空间先生前 2 个阵列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2015-05-05
  • 2019-12-21
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2022-06-13
相关资源
最近更新 更多