如果 JSONArray 中的 id 相同,如何在一个 textview 上显示值

Posted

技术标签:

【中文标题】如果 JSONArray 中的 id 相同,如何在一个 textview 上显示值【英文标题】:How to show value on one textview if their id is same in JSONArray 【发布时间】:2020-06-09 02:34:14 【问题描述】:

我有显示酒店先前订单详细信息的 json 数据。

如果日期和时间相同,则项目的“名称”应设置在 ListView 中的相同 TextView 中,并用逗号(,)分隔。

我从 API 获得的数据是这样的:-


 "error": false,
 "checkstatus": [
[
          
    "id": "244",                  
    "name": "Chicken Breast Curry",
    "date": "2020-02-22 11:13:53"       
  ,
          
    "id": "244",       
    "name": "Vegetarian ", 
    "date": "2020-02-22 11:13:53"       
  ,      
]
[
          
    "id": "245",                  
    "name": "Punjabi Royal for 2 person", 
    "date": "2020-02-25 09:11:23"       
  ,       
]
]

这是我的 Java 类:-

for (int i = 0; i < array.length(); i++) 
        try 
            JSONArray jsonArray = array.getJSONArray(i);
            for (int j = 0; j < jsonArray.length(); j++) 
                JSONObject object = jsonArray.getJSONObject(j);
                sproduct_name = object.getString(TAG_PRODUCT_NAME);                  
                sdate_time = object.getString(TAG_TIME);                   
                orderId = object.getString(TAG_ORDER_ID);

                get = new HashMap<>();
                get.put(TAG_PRODUCT_NAME, sproduct_name);                    
                get.put(TAG_TIME, sdate_time);                   
                get.put(TAG_ORDER_ID, orderId);

                myList.add(get);
            
         catch (JSONException e) 
            e.printStackTrace();
        
    
    adapter = new SimpleAdapter(getActivity(), myList, R.layout.order_history_child,
            new String[]TAG_PRODUCT_NAME, TAG_TIME, TAG_ORDER_ID,
            new int[]R.id.product_name, R.id.date_time, R.id.order_ids) 

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) 

            final View view = super.getView(position, convertView, parent);
            TextView product_name = view.findViewById(R.id.product_name);              
            TextView date_time = view.findViewById(R.id.date_time);               
            final TextView orderid = view.findViewById(R.id.order_ids);            

            return view;
        
    ;

现在我得到这样的数据截图:-

这就是我想要的:-

【问题讨论】:

【参考方案1】:

为日期和时间以及字符串生成器创建 ArrayList

List<String> datetimeList = new ArrayList<String>();

StringBuilder sb = new StringBuilder();

在你的 ArrayList 中添加日期和时间的字符串并与列表进行比较,如果字符串已经存在或不存在

 for (int j = 0; j < jsonArray.length(); j++) 
                    JSONObject object = jsonArray.getJSONObject(j);
                    sdate_time = object.getString(TAG_TIME);                   
                    orderId = object.getString(TAG_ORDER_ID);

datetimeList.add(sdate_time);

Scanner input = new Scanner(System.in);

String input = input.next();
boolean isExist = false;
for (String item : datetimeList)  
    if (input.equals(datetimeList.get(counter))) 
        //Your logic if it's there.
         isExist = true;
         break;
   


 if(isExist) 
     //Found in the arraylist.
     sproduct_name = object.getString(TAG_PRODUCT_NAME);                  

    sb.append(sproduct_name);



 get = new HashMap<>();
                get.put(TAG_PRODUCT_NAME, sb.toString());                    
                get.put(TAG_TIME, sdate_time);                   
                get.put(TAG_ORDER_ID, orderId);

            myList.add(get);

 
else
         sproduct_name = object.getString(TAG_PRODUCT_NAME); 
  get = new HashMap<>();
                get.put(TAG_PRODUCT_NAME, sproduct_name);                    
                get.put(TAG_TIME, sdate_time);                   
                get.put(TAG_ORDER_ID, orderId);





  myList.add(get);                 


    

【讨论】:

谢谢它的工作,但请告诉我如何删除 ListView 中的重复行。 @AmitSharma 如果您不想允许复制到对象的集合中,请在设置适配器之前使用 Set 对象。【参考方案2】:
try 
            JSONArray jsonArray = array.getJSONArray(i);
            for (int j = 0; j < jsonArray.length(); j++) 
                JSONObject object = jsonArray.getJSONObject(j);
                sproduct_name = object.getString(TAG_PRODUCT_NAME);                  
                sdate_time = object.getString(TAG_TIME);                   
                orderId = object.getString(TAG_ORDER_ID);

                get = new HashMap<>();
                get.put(TAG_PRODUCT_NAME, sproduct_name);  

                 //check here
                if(!object.getString(TAG_TIME).equals(sdate_time))
                       get.put(TAG_TIME, sdate_time);                   
                

                get.put(TAG_ORDER_ID, orderId);
                myList.add(get)

            

【讨论】:

请解释一下,我实现了你的代码,但我无法按照我的要求得到结果。

以上是关于如果 JSONArray 中的 id 相同,如何在一个 textview 上显示值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 访问 JSONArray 中项目的成员

循环以在 JAVA 中的 JSONObject 内获取相同的对象 N 次

如何将 JSONObjects 转换为 JSONArray?

如何将JSonArray发送到弹簧控制器

如何在 Kotlin 中将 ArrayList 转换为 JSONArray()

如何使用骆驼杰克逊将 JSONArray 转换为对象列表