【发布时间】:2017-02-08 19:17:00
【问题描述】:
我试图弄清楚如何处理从AsyncTask 返回的数据。
我有一个活动,我正在调用异步 Firebase 获取操作(操作存在于不同的类中),并且我想用检索到的 ArrayList 的大小来更新 Activity 中存在的TextView。这是我在 Activity onCreate 中调用的 Firebase 调用:
public void getAttendants() {
ArrayList<AttendModel> attendees = new ArrayList<AttendModel>();
FirebaseConnection.getInstance().getAllAttendeesFor(uuid, attendees);
Log.d("attendees", String.valueOf(attendees.size()));
}
这是我的 Firebase 操作:
public void getAllAttendeesFor(String UUID, final ArrayList<AttendModel> attendArray) {
final DatabaseReference attendObjects = getDatabaseTableWith(Constants.tableAttendObject);
Query queryRef = attendObjects.orderByChild(Constants.taAttendObjectUUID).equalTo(UUID);
queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
HashMap<String, Object> attend = (HashMap<String, Object>) postSnapshot.getValue();
String UUID = (String) attend.get(Constants.taAttendObjectUUID);
String userUsername = (String) attend.get(Constants.AttendObjectUserUsername);
AttendModel attendModel = new AttendModel(userUsername, UUID);
attendArray.add(attendModel);
//here would like to notify or somehow return the attendArray
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
在 Android 中最好的方法是什么?是否有可能实现各种适配器或完成处理程序?
【问题讨论】:
-
ValueEventListener.onDataChange是一个完成处理程序。您是否考虑过从其中更新文本视图? -
我做了,但目前我有一个班级,我正在做我所有的 Firebase 操作,并希望有一种优雅的方式将值返回给那个班级需要(这样我消除了其他类中可能需要执行相同操作的代码冗余)
-
有没有一种方法可以让我自己为我的函数创建一个完成处理程序,该函数将在
onDataChange中调用? -
您可以创建一个接口并将其传递给您执行 Firebase 操作的方法,然后在 Firebase 检索您的数据时回调您自己的
onDataChange -
嗯,这听起来很有趣,我会检查一下,然后回来提供我希望的解决方案......谢谢
标签: android asynchronous firebase firebase-realtime-database