我正在尝试使用来自远程服务器的数据实现可扩展的列表视图。我已经涵盖了 JSON 部分。我的示例返回了三个值集(通过在原始 JSON 响应中检查 logcat 来确认)。我现在的问题是在将 JSON 返回分为标头和子数据时,第一个值集被跳过。我的代码如下:
int lisDataHeaderCounter = 0;
String searchKey;
for (int i = 0; i < components.length(); i++) {
List<String> component_value = new ArrayList<String>();
searchKey = main_components.get(i);
if (!listDataHeader.contains(searchKey)) {
listDataHeader.add(searchKey);
Iterator<Map.Entry<String, String>> entries = sub_components.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, String> entry = entries.next();
Log.d("getValue() ", "+ " + entry.getValue());
if (searchKey == entry.getKey())
component_value.add(entry.getValue());
}
listDataChild.put(listDataHeader.get(lisDataHeaderCounter), component_value);
lisDataHeaderCounter++;
}
}
我也试过下面的代码,结果还是一样。
for (Map.Entry<String, String> entry : sub_components.entrySet()) {
if (searchKey == entry.getKey())
component_value.add(entry.getValue());
}
以下是上述代码正在处理的 JSON 响应示例:
[{"activity_code":"1","activity_name":"Midterm Exam"},
{"activity_code":"1","activity_name":"Final Exam"},
{"activity_code":"2","activity_name":"Project"}]
使用当前代码,在 for 循环中,searchKey 的第一个值为 '1'。当我放置一个 Log.d(); 在 while 循环中检查读取的第一个值是什么,我发现它是“期末考试”而不是“期中考试”。有没有办法让我在进入 while 循环之前获取第一个数据集的值?
这是我为确保将第一个值包含到 sub_components 所做的解决方法。但我想它看起来并不整洁。如果有人有更好的解决方案,请随时分享。
for (int i = 0; i < components.length(); i++) {
JSONObject c = components.getJSONObject(i);
String formula_code = c.getString(TAG_FORMULA_CODE);
String component_name = c.getString(TAG_ACTIVITY_NAME);
main_components.add(formula_code);
sub_components.put(formula_code, component_name);
if (!listDataHeader.contains(formula_code))
listDataHeader.add(formula_code);
if (i == 0) {
component_value.add(component_name);
}
}
for (int i = 0; i < listDataHeader.size(); i++) {
for (Map.Entry<String, String> entry : sub_components.entrySet()) {
if (listDataHeader.get(i) == entry.getKey())
component_value.add(entry.getValue());
}
listDataChild.put(listDataHeader.get(i), component_value);
component_value = new ArrayList<String>();
}