我的代码应该使我的 ListView
可单击并将用户带入另一个活动。但是我遇到了一个错误,说
Attempt to invoke virtual method 'void android.widget.ListView.setClickable(boolean)' on a null object reference
,但是我不知道如果ListView
正在工作,它是零对象引用的。这是我的提要代码:
public void populateList() {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference allBooksRef = rootRef.child("All_Books");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Book> bookModelList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Book book = ds.getValue(Book.class);
bookModelList.add(book);
}
ListView list = (ListView) findViewById(R.id.listView);
CustomListAdapter adapter = new CustomListAdapter(AdminFeed.this, bookModelList);
list.setAdapter(adapter);
list.setClickable(true);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
allBooksRef.addListenerForSingleValueEvent(valueEventListener);
list.setClickable(true);
list.setOnItemClickListener((AdapterView.OnItemClickListener) this);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(AdminFeed.this, BookIndexed.class);
i.putExtra("ValueKey", modelList.get(position).getTitle());
i.putExtra("ValueKey2", modelList.get(position).getAuthor());
startActivity(i);
title = bookModelList.get(position).getTitle();
}
为什么这会引起这样的错误?
移动 findViewById
在 ValueEventListener()
外部像下面的代码
尝试这个
public void populateList() {
ListView list = (ListView) findViewById(R.id.listView);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference allBooksRef = rootRef.child("All_Books");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Book> bookModelList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Book book = ds.getValue(Book.class);
bookModelList.add(book);
}
CustomListAdapter adapter = new CustomListAdapter(AdminFeed.this, bookModelList);
list.setAdapter(adapter);
list.setClickable(true);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
allBooksRef.addListenerForSingleValueEvent(valueEventListener);
list.setClickable(true);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent i = new Intent(AdminFeed.this, BookIndexed.class);
i.putExtra("ValueKey", modelList.get(position).getTitle());
i.putExtra("ValueKey2", modelList.get(position).getAuthor());
startActivity(i);
title = bookModelList.get(position).getTitle();
}
});
}