我有一个包含键的Arraylist checkOutBook。其打印正确以记录消息。但是-我只想要与listview中的checkOutBook键匹配的书,但是我却在数据库中获取所有书。
在onPostResume方法中,Im使用checkOutBook Sting列表检查firebase实时数据库的每个键,如果仅为true,则应添加它。但是它对于数据库中的每个键都是正确的,但是在checkOutBook数组中不存在。我不知道这是什么问题。
private ArrayList<String> checkOutBook;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
checkOutBook = new ArrayList<>();
Intent intent = getIntent();
checkOutBook =intent.getStringArrayListExtra("value");
Log.i("vvvv",checkOutBook.toString());
....
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.i("yyy","onresume");
mAdapter.clear();
//to check if the university ID is already registered
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("GTA","HHH");
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
if(checkOutBook.contains(postSnapshot.getKey()));
{
Log.i("RRR","HHH");
BooksWithKey book = new BooksWithKey(postSnapshot.getKey(), postSnapshot.child("bookName").getValue().toString(), postSnapshot.child("author").getValue().toString(),
postSnapshot.child("copies").getValue().toString(), postSnapshot.child("publisher").getValue().toString(), postSnapshot.child("yearPublish").getValue().toString(), postSnapshot.child("callNumber").getValue().toString());
mAdapter.add(book);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w("TAG", "loadPost:onCancelled", databaseError.toException());
}
});
}
最佳答案
要解决此问题,请结合以下三行代码:
private ArrayList<String> checkOutBook;
checkOutBook = new ArrayList<>();
checkOutBook =intent.getStringArrayListExtra("value");
在
ArrayList<String> checkOutBook = intent.getStringArrayListExtra("value");
将以下新代码行移动到
onDataChange()
方法中的该行之后:Log.i("GTA","HHH");
。