0
在我的應用程序中,我嘗試使書籍與MBaaS Backendless同步。因此,我從Backendless中獲取它們後,生成一個List來保存所有書名。我從服務器獲得正確的數據(沒有重複),但我的for循環啓動得太早,所以沒有數據可以迭代。 在啓動我的for-loop之前,我怎樣才能輕鬆完成填充列表? 這是我的代碼:錯誤的同步任務順序
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