从 valueEventListener java 返回值

2023-12-14

我试图返回一个布尔值,但返回的值始终为 false,即本例中的 0。

检查变量是一个实例变量,按下按钮时将调用以下函数。

private boolean checkAnswerSubmission() {

    DatabaseReference answerDatabase = FirebaseDatabase.getInstance().getReference().child("userPuzzleHistory").child(uid);
    answerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.hasChild(String.valueOf(imagename))) {
                check = 1;
            } else {
                check = 0;
            }
     //here the value check is working fine but the value cannot be returned from here.
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    //here the value returned is always 0
    if (check == 1)
        return true;
    else
        return false;

}

与所有异步操作一样,我经常以回调方式进行。

您的解决方案可以这样工作:

  1. 创建一个简单的回调接口(我的库中有一个回调接口,我几乎在每个应用程序中都使用它)

    public interface SimpleCallback {
        void callback(Object data);
    }
    
    // You could do it as well generic, that's what I do in my lib:
    public interface SimpleCallback<T> {
        void callback(T data);
    }
    

然后重新设计方法的签名,如下所示:

private void checkAnswerSubmission(@NonNull SimpleCallback<boolean> finishedCallback) {

    DatabaseReference answerDatabase = FirebaseDatabase.getInstance().getReference().child("userPuzzleHistory").child(uid);
    answerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This will simple call your callback containing a boolean true/false
            finishedCallback.callback(dataSnapshot.hasChild(String.valueOf(imagename)));
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

你可以这样称呼它:

checkAnswerSubmission(new SimpleCallback<boolean>() {
   @Override
   void callback(boolean data) {
       if (data) {
          // true was returned
       } else {
          // false was returned
       }
   }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 valueEventListener java 返回值 的相关文章

随机推荐