我是Android新手,我需要帮助来检索在解析服务器中创建的名为“ busStops”的数组,但我无法弄清楚代码中的问题所在
ParseQuery<ParseObject> parseQuery = new ParseQuery<ParseObject>
("RouteDetails");
parseQuery.whereEqualTo("routeNumber",searchView.getText().toString());
parseQuery.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> busStops, ParseException e) {
if(e == null){
final List<String> arrayList = new ArrayList<>();
for (ParseObject parseObject : busStops){
if (parseObject.getList("busStops") != null) {
arrayList.add(parseObject.getList("busStops").toString());
}
}
arrayAdapter = new ArrayAdapter(SearchForRoutes.this,android.R.layout.simple_list_item_1,arrayList);
listView.setAdapter(arrayAdapter);
}
}
});
答案 0 :(得分:1)
可以在ListView中显示一个数组。您应该在Java代码中使用getJSONArray而不是getList。请参阅下面的代码。
我的结构类是:
然后,我将以下代码添加到我的Activity(MainActivity.java)中:
final ListView listView = (ListView) findViewById(R.id.listviewA);
ParseQuery<ParseObject> query = ParseQuery.getQuery("RouteDetails");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
if (e == null) {
for(int i = 0; i < results.size(); i++) {
JSONArray array = results.get(i).getJSONArray("busStop");
for(int j = 0; j < array.length(); j++) {
try {
dataList.add(array.getString(j));
} catch (JSONException e1) {
e1.printStackTrace();
}
}
myArray = dataList.toArray(new String[dataList.size()]);
ArrayAdapter<String> adapterList
= new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_single_choice, myArray);
listView.setAdapter(adapterList);
}
} else {
final Toast toast = Toast.makeText(
MainActivity.this,
String.valueOf("Error =>" + e.getMessage()),
Toast.LENGTH_LONG
);
toast.show();
}
}
});
结果将是这样的:
答案 1 :(得分:0)
首先,除了 parseObject.getList(“ busStops”)返回的列表之外,您可能不需要创建另一个 ArrayList 。您可以将其直接传递给适配器构造函数。但是由于您可能要对列表进行处理,因此请像这样对列表进行迭代:
for(Object s : parseObject.getList("busStops") { String current = s.toString(); }
还可以通过将列表传递给ArrayList构造函数将列表保存到另一个ArrayList中。
ArrayList<String> al = new ArrayList<>(parseObject.getList("busStops"))
最后,您可以通过从无空if语句行中删除 .toString()并将更改为addAll添加到addAll来修复代码(这是最坏的做法:)) 。
像这样:arrayList.addAll(parseObject.getList("busStops"));