【问题标题】:How to call a json array which is inside a object and that object is in side a array?如何调用对象内部的json数组并且该对象在数组中?
【发布时间】:2019-08-06 08:23:47
【问题描述】:

我想在回收站视图中设置每天的会议次数。我将 JSON 对象作为 Main 对象,它由名为 data 的数组组成,数据由具有日期的对象组成,它由一个具有 n 个对象的数组组成。我的问题是如何将数据数组中的日期与辅助数组中的时间绑定。

我曾尝试使用 volley 获取数据,但我正在获取数据,但发生的事情是最后一个对象显示的次数等于时间数组中存在的对象数。

 dataModelArrayList = new ArrayList<>();

   JSONArray dataArray = obj.getJSONArray("data"); 
   for (int i = 0; i < dataArray.length(); i++) {                                    
        playerModel = new VipPojo();              
        JSONObject dataobj = dataArray.getJSONObject(i);
        playerModel.setDate(dataobj.getString("date"));                                    
        JSONArray dataArrays1 = dataobj.getJSONArray("time");                                    
        for (int j = 0; j < dataArrays1.length(); j++) {
            JSONObject dataobj1 = dataArrays1.getJSONObject(j);                                            
            playerModel.setTimes(dataobj1.getString("times"));
            playerModel.setNotice(dataobj1.getString("notice"));
            playerModel.setCategory(dataobj1.getString("category"));
            dataModelArrayList.add(playerModel)
        }
    }
    rvAdapter = new MeetingAdapter(getActivity().getApplicationContext(), dataModelArrayList); 
    recyclerView.setAdapter(rvAdapter);
    recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),, getResources().getInteger(R.integer.number_of_grid_items));

这是我的适配器 onBindViewHolder

holder.empname.setText(dataModelArrayList.get(position).getDate());
holder.postname.setText(dataModelArrayList.get(position).getTimes());

这是 JSON

{
    "data": [
        {
            "date": "Thursday 1, August, 2019",
            "time": [
                {
                    "times": "1:13PM to 1:13PM",
                    "notice": "testing",
                    "category": "Meeting"
                },
                {
                    "times": "12:00PM to 1:00PM",
                    "notice": "Meeting",
                    "category": "Meeting"
                }
            ]
        },
        {
            "date": "Friday 2, August, 2019",
            "time": [
                {
                    "times": "3:00PM to 3:30PM",
                    "notice": "Appointment",
                    "category": "Meeting"
                },
                {
                    "times": "12:00PM to 12:30PM",
                    "notice": "Appointment",
                    "category": "Meeting"
                }
            ]
        },
        {
            "date": "Monday 5, August, 2019",
            "time": [
                {
                    "times": "11:00AM to 11:30AM",
                    "notice": "Obj",
                    "category": "Meeting"
                }
            ]
        }
    ],
    "responseCode": 1,
    "responseMessage": ""
}

期望以正确的时间链接数据。

【问题讨论】:

标签: java android android-recyclerview


【解决方案1】:

您的代码演练:

VipPojo playerModel;
try {
    JSONArray dataArray = obj.getJSONArray("data");
    for (int i = 0; i < dataArray.length(); i++) {
        // playerModel = new VipPojo();
        JSONObject dataobj = dataArray.getJSONObject(i);
        JSONArray dataArrays1 = dataobj.getJSONArray("time");
        for (int j = 0; j < dataArrays1.length(); j++) {
            playerModel = new VipPojo(); // initialize here
            JSONObject dataobj1 = dataArrays1.getJSONObject(j);
            playerModel.setDate(dataobj.getString("date"));
            playerModel.setTimes(dataobj1.getString("times"));
            playerModel.setNotice(dataobj1.getString("notice"));
            playerModel.setCategory(dataobj1.getString("category"));
            dataModelArrayList.add(playerModel);
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}

但是您的 "date" 对象正在将先前分配的值添加到您的数据模型中,因为您在内部循环中使用 setDate() 而您没有这样做。这比我的工资水平略高,但在找到解决方案之前,您可以将 time 数组中的 "date" 对象移动到 noticecategory 旁边,...这暂时可以解决。

【讨论】:

  • 在日志中我得到了正确的值,但我的问题是如何在适配器中设置值?
  • @lakshmankumar 您应该在内部循环中初始化您的数据对象。查看更新的答案
  • 我已经在内部循环中初始化了数据对象,但是如果我在时间数组中有两个对象,那么在我的回收器视图中,我将在我的视图中打印两次数组中的第二个对象,其中第一个对象在该数组未显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 2019-06-15
相关资源
最近更新 更多