如果 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 中的 JSONObject 内获取相同的对象 N 次
如何将 JSONObjects 转换为 JSONArray?