gpt4 book ai didi

java - 从内部方法返回一个对象

转载 作者:行者123 更新时间:2023-11-29 08:29:11 25 4
gpt4 key购买 nike

我正在尝试为 firebase 方法构建一个单独的类,这些方法之一是返回对象用户

    public User getUser(){
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.child("users").child(mUserID).child("user_info").getValue(User.class);
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "onCancelled: Error: " + databaseError.getMessage());
}
});
return user;
}

返回用户给我一个错误。是否可以从内部 onDataChange() 方法返回 User 用户?以及如何?

最佳答案

不,这是不可能的,因为 Firebase 是异步的,并且您实际上是在尝试通过使调用方法“等待”返回的对象来将此方法转换回阻塞调用。

这里合适的模式是

1) 制作界面。

public interface OnUserResult {
void onUser(User u);
}

2) 将接口(interface)传递给 void 方法
3) 将结果传回回调接口(interface)

public void getUser(final OnUserResult callback) {
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.child("users").child(mUserID).child("user_info").getValue(User.class);
if (null!=callback) callback.onUser(user);
}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "onCancelled: Error: " + databaseError.getMessage());
}
});
}

4) 重写调用方法以不期望返回对象

// Bad: User user = api.getUser();

// Good
api.getUser(new OnUserResult() {
@Override public void onUser(User u) {
// Update the UI, or whatever
// Do not assign a global user variable here either
}
});
// any external user variable will (usually) still be null here

RxJava 等库可以帮助您以其他方式实现此模式

关于java - 从内部方法返回一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49720869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com