我正在练习 Firebase 库,我希望能够在与 Main 分开的类中使用一些方法,并从中调用这些方法并返回例如用户。
示例 FirebaseDBHelper.java
public static UserModel getUserFromId(String userId) {
final UserModel[] user = new UserModel[1];
dbRef.child("status").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
user[0] = dataSnapshot.getValue(UserModel.class);
Log.d("TAG", "Value is: " + dataSnapshot.getValue());
Log.d("TAG", "User: " + user);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("TAG", "getUser:onCancelled", databaseError.toException());
// ...
}
});
return user[0];
}
主要调用
UserModel user = FirebaseDatabaseHelper.getUserFromId("9876");
Log.d("TAG", "UserInfo: " + user);
但是我遇到了一些问题,因为方法 getUserFromId()
没有返回任何东西。
最佳答案
如果您了解 RxJava2,那么采用这种方法非常好:
public Observable<UserModel> UserModel getUserFromId(String userId) {
return Observable.create(new ObservableOnSubscribe<UserModel>() {
@Override
public void subscribe(@NonNull ObservableEmitter<UserModel> e) throws Exception {
dbRef.child("status").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
UserModel user = dataSnapshot.getValue(UserModel.class);
e.onNext(user);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("TAG", "getUser:onCancelled", databaseError.toException());
e.onError(databaseError);
// ...
}
});
}
});
}
或者,您可以像这样在获取 UserModel
时定义接口(interface)回调
public static void getUserFromId(String userId,OnGetUser callback) {
dbRef.child("status").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
user[0] = dataSnapshot.getValue(UserModel.class);
Log.d("TAG", "Value is: " + dataSnapshot.getValue());
Log.d("TAG", "User: " + user);
callback.onGetUser();
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("TAG", "getUser:onCancelled", databaseError.toException());
// ...
}
});
}
interface OnGetUser
{
void onGetUser();
}
或者,当 onCancelled
被调用时,user[0]
应该有一些值,比如空的 UserModel
关于java - Firebase 帮助类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44808149/