我有一个活动和一个名为CourseDetails
.
String getData;
DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("courses").child("Business");
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
CourseDetails c = dataSnapshot.getValue(CourseDetails.class);
getData = c.getCourseName();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
textview1.setText(getData);
使用上面的代码会在上面的最后一行抛出NullPointerException
。但是如果我放入textview1.setText(getData)
,ValueEventListener
下getData = c.getCourseName()
,数据就可以正确显示了。
我发现有效的方法是使用SharedPreferences
或设置来自诸如public void display(String data) { textview1.setText(data); }
. 但是,即使数据在外部,还有什么其他方法可以保留检索到的数据ValueEventListener
?
例如,我想将添加到ArrayList
.
ArrayList<String> listData;
DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("courses").child("Business");
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
CourseDetails c = dataSnapshot.getValue(CourseDetails.class);
String code = c.getCourseCode();
String name = c.getCourseName();
String CodeName = code + " " + name;
listData.add(CodeName);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
// data in ArrayList should be able to display here
StringBuilder builder = new StringBuilder();
for (String s : listData) {
builder.append(s + "\n");
}
textview1.setText(builder.toString());
如何实现这种坚持?