Firebaseでデータを作成した後。私はFirebaseからデータを取得しようとします。しかし、私は問題があると思います。ref.addChildEventListener(childEventListener)の前にLog.d(TAG、list.size())が実行されている可能性があります。コンプリート。誰が私を助けられるか ?Firebaseのコールバックandroid
public class NewFirebase extends AppCompatActivity {
List <Product> list = new ArrayList < >();
private static final String TAG = "Firebase";
DatabaseReference ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Firebase.setAndroidContext(this);
ref = FirebaseDatabase.getInstance().getReference();
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
// A new comment has been added, add it to the displayed list
Product comment = dataSnapshot.getValue(Product.class);
for (DataSnapshot child: dataSnapshot.getChildren()) {
Product post = child.getValue(Product.class);
list.add(post);
}
// ...
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "postComments:onCancelled", databaseError.toException());
}
};
ref.addChildEventListener(childEventListener);
Log.d(TAG, list.size() + "");
}
class RetrievingData extends AsyncTask < Void, Void, Void > {
@Override
protected Void doInBackground(Void...voids) {
return null;
}
}
}
の
addValueEventListener
を使用する必要があります。 addChildEventListener(childEventListener);完了しますが、次に何をしますか? –そのデータは非同期で読み込まれるため、アプリケーションのコードで利用できるようになるまでには時間がかかることがあります。まだ読み込まれていないものを返すことはできません。非同期動作の詳細については、このQ&Aを参照してください。http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –
ref.addChildEventListener(childEventListener ); Log.d(TAG、list.size())が実行される前に完了します。 – TungLoGach