내 응용 프로그램에서 MBaaS Backendless와 서적을 동기화하려고합니다. 그러므로 나는 Backendless에서 가져온 후에 모든 책 제목을 저장하기 위해 목록을 생성합니다. 서버 (중복없이)에서 올바른 데이터를 얻지 만 for 루프가 너무 일찍 시작하므로 반복 할 데이터가 없습니다. for-loop를 시작하기 전에 List 작성을 쉽게 완료하려면 어떻게해야합니까? 이 내 코드입니다 :동기화 중에 작업 순서가 잘못되었습니다.
final List<String> all_books_without_duplicates = new ArrayList<String>();
// queryId = Id of the user
Backendless.Data.of(Books.class).find(queryId, newLoadingCallback<BackendlessCollection<Books>>(this, getString(R.string.loading_books), true) {
@Override
public void handleResponse(BackendlessCollection<Books> booksBackendlessCollection) {
Iterator<Books> booksIterator = booksBackendlessCollection.getCurrentPage().iterator();
while (booksIterator.hasNext()) {
Books booksonline = booksIterator.next();
final String book_title = booksonline.getBookTitle();
// avoid duplictes
if (!all_books_without_duplicates.contains(book_title)) {
all_books_without_duplicates.add(book_title);
Log.d("added book title:", book_title);
}}}});
Log.d("for-loop elements: ", String.valueOf(all_books_without_duplicates));
for (int x=0; x<all_books_without_duplicates.size(); x++){
final String book_title_value = all_books_without_duplicates.get(x);
String whereClause = "booktitle LIKE '%" + book_title_value + "%'";
QueryOptions queryOptions = new QueryOptions();
queryOptions.setRelated(Arrays.asList("book"));
BackendlessDataQuery query = new BackendlessDataQuery(queryOptions);
query.setWhereClause(whereClause);
// get all book-ids from Backendless where title is x
Backendless.Data.of(BookIds.class).find(query, new LoadingCallback<BackendlessCollection<BookIds>>(MainActivity.this, getString(R.string.loading_books), true) {
@Override
public void handleResponse(BackendlessCollection<BookIds> bookIDsBackendlessCollection) {
super.handleResponse(bookIDsBackendlessCollection);
Iterator<BookIds> bookIDsSyncIterator = bookIDsBackendlessCollection.getCurrentPage().iterator();
while (bookIDsSyncIterator.hasNext()){
BookIds book_ids = bookIDsSyncIterator.next();
String book_id_be = book_ids.getObjectId();
// get all book-ids from SQLite-DB
DatabaseHelper db=new DatabaseHelper(getApplicationContext());
final List<String>bookIds_sql = db.getAllBookIds();
// save new book in SQLite if it lacked so far
if(bookIds_sql.contains(book_id_be)){
// book already exists
}
else{
saveNewBookFromBackendless(book_id_be);
}
}}});}
handleResponse 내부에서 for 루프를 이미 이동하려고 시도했지만, for 루프 내에서 (코드에 표시되지 않음) Backendless와 두 번째 동기화를 수행 했으므로 작동하지 않았습니다.이 두 가지 조합이 문제가됩니다. . – Timitrov
전체 코드를 게시하십시오. 아마도 도움이 될 것입니다. – palako
나머지 코드를 추가했습니다. 내 문제가 어디에 있는지 더 잘 이해할 수 있기를 바랍니다. – Timitrov