在Android中等待Firebase异步检索数据我需要存储他自己异步的FireBase getValue方法的结果。我不能使用类似“onPostExecute()”的东西,为了我的目的,我无法执行“onDataChange()”的所有操作,因为我需要在将来的其他活动中引用一些参考。这是我的片段检索数据: List<Village> villages = new LinkedList<>();
Firebase ref = new Firebase("MYFIREBASEURL").child("village");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
spinnerArray.clear();
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Village v = postSnapshot.getValue(Village.class);
villages.add(v);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});如果我尝试从“onDataChange”中读取村庄,我自然会为他的异步生活读取空值。有一种方法可以确保调用onDataChange吗?
3 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
对不起,如果这不是你想要的,因为我的英语太糟糕了。您可以定义一个侦听器接口来处理它。例:
public interface OnGetDataListener { public void onStart(); public void onSuccess(DataSnapshot data); public void onFailed(DatabaseError databaseError);}
我创建了一个自定义函数来获取Database.class中的数据:
public void mReadDataOnce(String child, final OnGetDataListener listener) { listener.onStart(); FirebaseDatabase.getInstance().getReference().child(child).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { listener.onSuccess(dataSnapshot); } @Override public void onCancelled(DatabaseError databaseError) { listener.onFailed(databaseError); } });}
当我想从Main.class获取数据时,我会:
private void mCheckInforInServer(String child) { new Database().mReadDataOnce(child, new OnGetDataListener() { @Override public void onStart() { //DO SOME THING WHEN START GET DATA HERE } @Override public void onSuccess(DataSnapshot data) { //DO SOME THING WHEN GET DATA SUCCESS HERE } @Override public void onFailed(DatabaseError databaseError) { //DO SOME THING WHEN GET DATA FAILED HERE } });}
通过这种方式,您可以重用您的方法并处理数据。
- 3 回答
- 0 关注
- 381 浏览
添加回答
举报
0/150
提交
取消