目前正在开发一个应用程序,该应用程序从搜索中获取结果,解析返回的 JSON 对象,然后将结果片段添加到ArrayLists
创建的名为VenueList
.
下面是从服务接收结果并解析 JSON 的方法:
private static List<String> getResultsFromJson(String json) {
ArrayList<String> resultList = new ArrayList<String>();
try {
JSONObject resultsWrapper = (JSONObject) new JSONTokener(json).nextValue();
JSONArray results = resultsWrapper.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
JSONObject result = results.getJSONObject(i);
resultList.add(result.getString("text"));
}
}
catch (JSONException e) {
Log.e(TAG, "Failed to parse JSON.", e);
}
return resultList;
}
什么结果变成了一个List
变量调用mResults
(澄清:mResults = getResultsFromJson(restResult);
。然后在以下循环中使用,其中包括将结果放入ArrayAdapter
用于在 ListFragment 中显示它们的循环中:
for (String result : mResults) {
VenueList.addVenue(result, "HELLO WORLD");
adapter.add(result);
}
我还将结果添加到一个名为的类中,该类VenueList
管理结果并使它们可用于多个视图。它基本上只包含多个ArrayLists
,其中包含搜索中返回的每个场所的不同类型的详细信息。我用来添加场地的VenueList
方法如下(您可以在上面的 for 循环中看到它):
public static void addVenue(String name, String geo) {
venueNames.add(name);
venueGeos.add(geo);
}
我希望该addVenue
方法能够接受多个参数并更新VenueList
类。然而,当我addVenue
在 for 循环中调用该方法时,我只能传递它String result
(从循环的参数)并且无法弄清楚如何传递它的第二个参数(它也应该来自解析的 JSON getResultsFromJson
)所以我"HELLO WORLD"
现在用作占位符。
我意识到getResultsFromJson
只有一个列表返回。我需要能够从我解析的 JSON 对象中获取多个元素,然后以正确的顺序将它们添加到 VenueList。
所以我的问题是:
1)给定getResultsFromJson
方法和for
循环,我该如何使用addVenue()
设计的方法?如何解析 JSON 中的多个元素,然后将它们同时添加到 VenueList?我计划稍后为其添加更多参数,但我假设如果我可以让它与两个一起工作,我可以让它与四个或五个一起工作。
2)如果不可能,应该如何重新设计getResultsFromJson
、for
循环和addVenue
方法以使其正常工作?
如果您需要更多详细信息或代码,请告诉我 - 很乐意提供。谢谢!
编辑 - 完整的 VenueList 类:
public class VenueList {
private static ArrayList<String> venueNames;
private static ArrayList<String> venueGeos;
public VenueList() {
venueNames = new ArrayList<String>();
venueGeos = new ArrayList<String>();
}
public static void addVenue(String name, String geo) {
venueNames.add(name);
venueGeos.add(geo);
}
public static String getVenueName(int position) {
return venueNames.get(position);
}
public static String getVenueGeo(int position) {
return venueGeos.get(position);
}
public static void clearList() {
venueNames.clear();
venueGeos.clear();
}
}
说明:我将为要存储的有关场地(电话号码、地址等)的每个数据元素添加额外的 ArrayList