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
多谢各位