Java 暂停循环,直到客户端返回结果

Java 暂停循环,直到客户端返回结果,java,android,android-asynctask,google-books-api,Java,Android,Android Asynctask,Google Books Api,我开发了一个应用程序,可以将多个项目加载到recyclerView中 这些项目是由用户上传或从GoogleBooksAPI加载的书籍 每个用户都有自己的“图书馆”,我在那里存储图书的ID 当用户进入他的库时,我使用for循环从数据库加载书籍 如果ID来自GoogleBooksAPI,我将从那里加载,否则,我将从数据库加载 现在,当我运行for循环时,它会在GoogleBookAPI加载完成之前移动到下一个迭代,这会在我的recyclerView中造成问题 我使用以下代码: for (QueryD

我开发了一个应用程序,可以将多个项目加载到
recyclerView

这些项目是由用户上传或从GoogleBooksAPI加载的书籍

每个用户都有自己的“图书馆”,我在那里存储图书的ID

当用户进入他的库时,我使用for循环从数据库加载书籍

如果ID来自GoogleBooksAPI,我将从那里加载,否则,我将从数据库加载

现在,当我运行for循环时,它会在GoogleBookAPI加载完成之前移动到下一个迭代,这会在我的recyclerView中造成问题

我使用以下代码:

for (QueryDocumentSnapshot document : task.getResult()) {
    if (document.getString( "BookID" ).length() > AppConstants.UPLOADED_BOOK_LENGTH) {
        MyBooks.add( new DiscoverBooks( document.getString( "BookID" ) ) );
        MyBooksTitle.add( document.getString( "BookTitle" ) );
        MyBooksAuthor.add( document.getString( "BookAuthor" ) );
        MyBooksURL.add( "" );
    } else {
        MyBookClient client = new MyBookClient();
        client.getBooks( document.getString( "BookID" ), new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                if (response != null) {
                    final MyBook books = MyBook.fromJson( response );
                    MyBooksGBS.add( new DiscoverBooks( document.getString( "BookID" ) ) );
                    MyBooksGBSTitle.add( books.getTitle() );
                    MyBooksGBSAuthor.add( books.getAuthor() );
                    MyBooksGBSURL.add( books.getCoverUrl() );
                }
            }
        } );
    }
    dateCreatedOrig.add( (Timestamp) document.get( "DateCreated" ) );
    counter = counter + 1;
}

List<List<DiscoverBooks>> MyBooksWithAdsPartsGBS = Lists.partition( MyBooksGBS, AppConstants.ADS_STEP_MYBOOKS );
List<List<String>> MyBooksTITLESWithAdsPartsGBS = Lists.partition( MyBooksGBSTitle, AppConstants.ADS_STEP_MYBOOKS );
List<List<String>> MyBooksAUTHORSWithAdsPartsGBS = Lists.partition( MyBooksGBSAuthor, AppConstants.ADS_STEP_MYBOOKS );
List<List<String>> MyBooksURLSWithAdsPartsGBS = Lists.partition( MyBooksGBSURL, AppConstants.ADS_STEP_MYBOOKS );

List<List<DiscoverBooks>> MyBooksWithAdsPartsMan = Lists.partition( MyBooks, AppConstants.ADS_STEP_MYBOOKS );
List<List<String>> MyBooksTITLESWithAdsPartsMan = Lists.partition( MyBooksTitle, AppConstants.ADS_STEP_MYBOOKS );
List<List<String>> MyBooksAUTHORSWithAdsPartsMan = Lists.partition( MyBooksAuthor, AppConstants.ADS_STEP_MYBOOKS );
List<List<String>> MyBooksURLSWithAdsPartsMan = Lists.partition( MyBooksURL, AppConstants.ADS_STEP_MYBOOKS );

MyBooksWithAdsPartsAll = new ArrayList<>( MyBooksWithAdsPartsMan );
MyBooksWithAdsPartsAll.addAll( 0, MyBooksWithAdsPartsGBS );

MyBooksTITLESWithAdsPartsAll = new ArrayList<>( MyBooksTITLESWithAdsPartsMan );
MyBooksTITLESWithAdsPartsAll.addAll( 0, MyBooksTITLESWithAdsPartsGBS );

MyBooksAUTHORSWithAdsPartsAll = new ArrayList<>( MyBooksAUTHORSWithAdsPartsMan );
MyBooksAUTHORSWithAdsPartsAll.addAll( 0, MyBooksAUTHORSWithAdsPartsGBS );

MyBooksURLSWithAdsPartsAll = new ArrayList<>( MyBooksURLSWithAdsPartsMan );
MyBooksURLSWithAdsPartsAll.addAll( 0, MyBooksURLSWithAdsPartsGBS );
for(QueryDocumentSnapshot文档:task.getResult()){
if(document.getString(“BookID”).length()>AppConstants.upload\u BOOK\u length){
添加(新的DiscoverBooks(document.getString(“BookID”));
MyBooksTitle.add(document.getString(“bookstitle”);
MyBooksAuthor.add(document.getString(“booksauthor”);
MyBooksURL.add(“”);
}否则{
MyBookClient=新建MyBookClient();
client.getBooks(document.getString(“BookID”),新的JsonHttpResponseHandler(){
@凌驾
成功时的公共void(int statusCode,Header[]headers,JSONObject响应){
if(响应!=null){
final MyBook books=MyBook.fromJson(响应);
添加(新的DiscoverBooks(document.getString(“BookID”));
mybooksbstitle.add(books.getTitle());
mybooksbsauthor.add(books.getAuthor());
MyBooksGBSURL.add(books.getCoverUrl());
}
}
} );
}
add((时间戳)document.get(“DateCreated”);
计数器=计数器+1;
}
ListMyBooksWithADSPartsGBs=Lists.partition(MyBooksGBS,AppConstants.ADS\u步骤\u MYBOOKS);
用adspartsgbs=Lists.partition列出MyBookTitles(MyBooksGBSTitle,AppConstants.ADS\u STEP\u MYBOOKS);
使用ADSPARTSGBS=Lists.partition列出MyBooksAuthors(MyBooksGBSAutor,AppConstants.ADS\u步骤\u MYBOOKS);
List MyBooksURLSWithAdsPartsGBS=Lists.partition(MyBooksGBSURL,AppConstants.ADS\u STEP\u MYBOOKS);
ListMyBookswithAdsPartsMan=Lists.partition(MyBooks,AppConstants.ADS\u步骤\u MyBooks);
列出MyBookTitleWithAdsPartsMan=Lists.partition(MyBookTitle,AppConstants.ADS\u STEP\u MYBOOKS);
ListMyBooksAuthorsWithAdsPartsMan=Lists.partition(MyBooksAuthor,AppConstants.ADS\u STEP\u MYBOOKS);
List MyBooksURLSWithAdsPartsMan=Lists.partition(MyBooksURL,AppConstants.ADS\u STEP\u MYBOOKS);
MyBooksWithAdsPartsAll=新阵列列表(MyBooksWithAdsPartsMan);
MyBooksWithAdsPartsAll.addAll(0,MyBooksWithAdsPartsGBS);
MyBookTitlesWithAdsPartsAll=新阵列列表(MyBookTitlesWithAdsPartsMan);
MyBooksTITLESWithAdsPartsAll.addAll(0,MyBooksTITLESWithAdsPartsGBS);
MyBooksAUTHORSWithAdsPartsAll=new ArrayList(MyBooksAUTHORSWithAdsPartsMan);
MyBooksAUTHORSWithAdsPartsAll.addAll(0,MyBooksAUTHORSWithAdsPartsGBS);
MyBooksURLSWithAdsPartsAll=新数组列表(MyBooksURLSWithAdsPartsMan);
MyBooksURLSWithAdsPartsAll.addAll(0,MyBooksURLSWithAdsPartsGBS);
我遇到的问题是,我要排队了:

MyBooksWithAdsPartsAll = new ArrayList<>( MyBooksWithAdsPartsMan );
MyBooksWithAdsPartsAll.addAll( 0, MyBooksWithAdsPartsGBS );
MyBooksWithAdsPartsAll=newarraylist(MyBooksWithAdsPartsMan);
MyBooksWithAdsPartsAll.addAll(0,MyBooksWithAdsPartsGBS);
这就给了我错误的
MyBooksWithAdsPartsAll
大小,因为它没有添加所有
MyBooksWithAdsPartsGBS

多谢各位