У меня есть list , в которую хочу добавить данные которые беру из базы. Есть функция func , где я добавляю в мой list записи. Казалось бы после вызванной функции , размер list-а должен увеличиться . Чтобы удостовериться в этом я проверил размер сразу же после вызова функции func. Но размер оказался равен нулю. Но если проверить размер list-а внутри функции func , то он вовсе не ноль. В чем может быть причина? Мне кажется я не знаю какую-то простую базовую вещь.
P.S : Для читабельности я минимизировал размер кода
public class TaskActivity extends AppCompatActivity {
ArrayList<Task> list ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_task);
list = new ArrayList<>() ;
func() ; // вызов функции
tx.setText("Size:" + list.size()); //проверка размера
}
public void func()
{
Backendless.Persistence.of(Task.class).find(new AsyncCallback<BackendlessCollection<Task>>() {
@Override
public void handleResponse(BackendlessCollection<Task> response) {
Iterator<Task> it = response.getCurrentPage().iterator();
while(it.hasNext())
{
Task t = it.next() ;
list.add(t) ;
}
//tx.setText("Size:" + list.size()); // проверка размера внутри функции
}
@Override
public void handleFault(BackendlessFault fault) {
Toast.makeText(getApplicationContext() , "WRONG!!!" , Toast.LENGTH_SHORT).show();
}
}) ;
}
}
Я не знаток Java, но, судя по документации, вы используете асинхронную версию поиска. Это значит, как минимум, две вещи:
find
) не будет прерван. find
потребуется какое-то время.Из этого следует, что вы вызываете метод func()
, он запускает асинхронную операцию и тут же возвращается обратно в метод onCreate
где вы проверяете размер коллекции. Но, метод find
ещё не успел завершить работу и вызвать callback handleResponse
, где вы, по вашей задумке, заполняете коллекцию list
.
Тут несколько путей решения вашей проблемы:
AsyncCallback
find
(т.е. ту, которая блокирует поток выполнения программы пока выполняется)Всё та же документация подсказывает подходящий метод:
public BackendlessCollection<Map> Backendless.Persistence.of( "TABLE-NAME" ).find()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Имею две таблицы DEPARTMENT и EMPLOYEE (первая родительская, а вторая - дочерняя)То есть, каждому департаменту соответствует список сотрудников (связь...
При вводе строки состоящей не только из цифр происходит ошибка