[英]How do I get the values(ArrayList<Book> Books variable) generated in my getBooks() into my onCreate method?
我使用函數getBooks在MainActivity中生成Book Objects的ArrayList。 但我無法將ArrayList放入我的onCreate中,因為每次我在onCreate中訪問它時都會得到一個outofBounds異常,表明我的列表大小為0。
另外如何通過bundle發送這個對象列表。 我實際上嘗試過parcelable但是片段的onCreate中的savedinstancestate總是為null,應用程序停止。
public class MainActivity extends AppCompatActivity implements FragmentA.Communicator{
FragmentA f1;
FragmentB f2;
static ArrayList<Book> b = new ArrayList<Book>();
FragmentManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getBooks();
Log.d("Main-Title",b.get(3).getTitle());
manager = getSupportFragmentManager();
f1 = (FragmentA) manager.findFragmentById(R.id.fragment);
f1.setCommunicator(this);
}
@Override
public void respond(int index) {
f2 = (FragmentB) manager.findFragmentById(R.id.fragment2);
if(f2!=null && f2.isVisible())
{
f2.changeData(index);
}
else
{
Bundle bundle = new Bundle();
bundle.putInt("index", index);
Fragment newFragment = new FragmentC();
newFragment.setArguments(bundle);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
private void getBooks(){
String url = Book.API.BASE_URL;
//ArrayList<Book> boo;
Retrofit retrofit = new Retrofit.Builder().baseUrl(Book.API.BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
Book.API api = retrofit.create(Book.API.class);
Call<ArrayList<Book>> call = api.getBooks();
call.enqueue(new Callback<ArrayList<Book>>() {
@Override
public void onResponse(Call<ArrayList<Book>> call, Response<ArrayList<Book>> response) {
ArrayList<Book> Books = response.body();
for(Book h: Books){
Log.d("Title",h.getTitle());
b.add(h);
}
}
@Override
public void onFailure(Call<ArrayList<Book>> call, Throwable t) {
Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
}
您試圖以異步方式獲取數據,getBooks()方法在檢索數據之前不會停止。 所以你的清單是空的。
public void onCreate(){
getBooks();
//here b might be empty
}
public void afterGettingBooks(){
//here b will have retrieved data
}
private void getBooks(){
//code
call.enqueue(new Callback<ArrayList<Book>>() {
@Override
public void onResponse(Call<ArrayList<Book>> call, Response<ArrayList<Book>> response) {
//upadte b
afterGettingBooks();
}
}
@Override
public void onFailure(Call<ArrayList<Book>> call, Throwable t) {
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.