#android #parse-platform #parse-android-sdk
#Android #синтаксический анализ-платформа #parse-android-sdk
Вопрос:
Я новичок в 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);
}
}
});
Комментарии:
1. ‘routeNumber’ — это тип числа или тип строки в parse-server? Если число, то попробуйте преобразовать SearchView.getText() в число перед передачей запроса parse.
2. Я пробовал SearchView.getText (), он все еще не работает
3. Каков тип данных ‘routeNumber’ в parse-server?
4. Номер маршрута имеет тип int на сервере синтаксического анализа
5. Попробуйте использовать Integer.parseInt(SearchView.getText())
Ответ №1:
Можно отобразить массив в ListView. Вам следует использовать getJSONArray вместо getList в вашем JAVA-коде. Смотрите мой код ниже.
Мой класс структуры:
Затем я добавил приведенный ниже код в свою деятельность (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();
}
}
});
И результат будет примерно таким:
Ответ №2:
Прежде всего, вам может не понадобиться создавать другой ArrayList, кроме списка, возвращаемого ParseObject.getList(«busStops»). Вы можете напрямую передать его конструктору адаптера. Но поскольку вы можете захотеть выполнить процесс в списке, выполните итерацию списка следующим образом : for(Object s : parseObject.getList("busStops") { String current = s.toString(); }
Также вы можете сохранить список в другой ArrayList, передав его конструктору ArrayList. ArrayList<String> al = new ArrayList<>(parseObject.getList("busStops"))
И, наконец, вы можете исправить свой код (что является наихудшей практикой :)), просто удалив .toString() из строки в вашем операторе none-null if и изменение add на addAll. вот так : arrayList.addAll(parseObject.getList("busStops"));