【发布时间】:2018-03-15 10:08:30
【问题描述】:
我必须将来自 firebase 的响应返回到另一个函数,该函数将对该数据进行进一步处理。
public ArrayList<String> getDatas(String number) {
final ArrayList<String> requestList = new ArrayList<>();
final FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference reference = database.getReference("Users").child(number).child("request_list");
final DatabaseReference requestReference = database.getReference("Request");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i(TAG, "onDataChange: ");
for (final DataSnapshot data : dataSnapshot.getChildren()) {
Log.i(TAG, "onDataChange: data: " + data.getValue());
requestList.add(data.getValue().toString());
}
Log.i(TAG, "onDataChange: for ended");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return requestList;
}
由于 firebase 操作是异步的,我无法等待数据返回。有人可以帮我解决这个问题吗?
【问题讨论】:
-
重新思考您的设计。您真的不想等到数据可用。
-
所以我应该在每次添加新数据时通知
-
不,只要有数据就异步更新你的 UI。
-
永远不要试图以任何理由阻塞主线程。这将为您的用户带来糟糕的体验,并可能导致 ANR。您应该习惯 Firebase API 都是异步的,并且您需要在调用侦听器后创建或更新您的视图。
标签: java android firebase asynchronous