Вернуть данные запроса Parse из вспомогательного класса в мою деятельность - PullRequest
0 голосов
/ 12 мая 2019

Я получаю данные из базы данных и заполняю ArrayList

Переменные категории ArrayList заполняются в области findInBackground.Я заметил, что программа никогда не выходит за рамки findInBackground, поэтому она никогда не возвращает ничего за мою деятельность

 public ArrayList<Categorias> onCompleteGetData(String tableName) {

    ParseQuery<ParseObject> query = ParseQuery.getQuery(tableName);
    query.findInBackground((objects, e) -> {
        for (ParseObject objectList : objects) {
            Categorias categ = new Categorias();
            categ.setName(String.valueOf(objectList.get("name")));
            categ.setCategoriaId(String.valueOf(objectList.get("objectId")));
            this.categories.add(categ);
        }
    });

    return this.categories;
}

['House', 'loan', 'salary']

Часть моей деятельности

            if (value == -1){
                categorias = new ArrayList<>();
                CategoryController controller = new CategoryController(context);
                categorias = controller.onCompleteGetData(Utils.CATEGORIA_EXPENSE);
                Toast.makeText(context,  String.valueOf(controller.onCompleteGetData(Utils.CATEGORIA_DESPESA).size()), Toast.LENGTH_SHORT).show();
            }else if (value == +1){
                categorias = new ArrayList<>();
                CategoryController controller = new CategoryController(context);
                categorias = controller.onCompleteGetData(Utils.CATEGORIA_REVENUE);
                Toast.makeText(context, String.valueOf(controller.onCompleteGetData(Utils.CATEGORIA_RECEITA).size()), Toast.LENGTH_SHORT).show();
            }

1 Ответ

0 голосов
/ 13 мая 2019

Поскольку вы используете метод findInBackground, "return this.categories;" выполняется до (и, следовательно, возвращает пустой список), чем ваш цикл. Более простой способ исправить ваш код - использовать метод find вместо findInBackground.

public ArrayList<Categorias> onCompleteGetData(String tableName) {

  ParseQuery<ParseObject> query = ParseQuery.getQuery(tableName);
  List<ParseObject> objectList = query.find();

  for (ParseObject objectList : objects) {
    Categorias categ = new Categorias();
    categ.setName(String.valueOf(objectList.get("name")));
    categ.setCategoriaId(String.valueOf(objectList.get("objectId")));
    this.categories.add(categ);
  }

  return this.categories;
}
...