【问题标题】:How to show value on one textview if their id is same in JSONArray如果 JSONArray 中的 id 相同,如何在一个 textview 上显示值
【发布时间】: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;
        }
    };

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

这就是我想要的:-

【问题讨论】:

    标签: android arrays json api listview


    【解决方案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)
    
                }
    

    【讨论】:

    • 请解释一下,我实现了你的代码,但我无法按照我的要求得到结果。
    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 2023-03-30
    • 1970-01-01
    • 2020-07-31
    • 2013-03-27
    • 2018-09-09
    • 2023-03-17
    • 2011-09-17
    相关资源
    最近更新 更多