私にはアクティビティとCourseDetails
というモデルがあります。Android - Firebaseから取得したデータを保存する
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());
どのようにこの種の持続性を達成するには?
もう一度openSource。ありがとう。もしそうなら、あるノードから 'ArrayList A 'にデータを取り出して保存し、別のノードからデータを取り出して' ArrayList B'に保存したいのであれば、 'ArrayList'の後に' ArrayList'の両方にデータを保持する方法を提案できますか? EventListener'が削除されましたか? –
'ArrayLists'の両方のデータは、後で比較のために使用されます –
こんにちは、私はかなりよく理解していませんが、' EventListener'が削除された後は、データが変更されるたびに 'ArrayLists'を更新したくない? – 0p3n5ourcE