Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我能';t从Firebase数据库检索布尔数据_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 我能';t从Firebase数据库检索布尔数据

Android 我能';t从Firebase数据库检索布尔数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试创建一个Android聊天应用程序。在这种情况下,我试图让人们彼此添加朋友(经典)。但我无法从Firebase数据库检索布尔数据。它总是返回false/可能为null。检查我的Firebase后端 friends{ 552nQquUrtSgbVVLgXxfxOh6SL52{ NuJohj7nalWnpiMfC1zl3r77QDt2: true vIYkKWAWwKTRD4NQfixzcNnfk6X2: true } } 下面是我的Androi

我正在尝试创建一个Android聊天应用程序。在这种情况下,我试图让人们彼此添加朋友(经典)。但我无法从Firebase数据库检索布尔数据。它总是返回false/可能为null。检查我的Firebase后端

friends{
 552nQquUrtSgbVVLgXxfxOh6SL52{
      NuJohj7nalWnpiMfC1zl3r77QDt2: true
      vIYkKWAWwKTRD4NQfixzcNnfk6X2: true
   }
}     
下面是我的Android代码

 public boolean checkFriend(final String uID){
    mDatabase = FirebaseDatabase.getInstance().getReference("friends");
    mDatabase.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
           ret= (Boolean) snapshot.child(uID).getValue();               
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i("HATA OLUŞTU!","FriendManager checkFriend'de veri tabanı bağlantısı hatası oluştu."+ databaseError);
        }
    });
    Log.i("Database", mDatabase.child(user.getUid()).toString()+" +++ "+uID+" ++++ "+ ret.toString());
    return ret;
}
我的日志在下面

05-17 03:40:35.803 22488-22488/com.furkan.profil I/Database: https://profil-95859.firebaseio.com/friends/552nQquUrtSgbVVLgXxfxOh6SL52 +++ 539vt6Cwi0Y4dF3qmgI6LN1kJJo1 ++++ false
05-17 03:40:35.805 22488-22488/com.furkan.profil I/Database: https://profil-95859.firebaseio.com/friends/552nQquUrtSgbVVLgXxfxOh6SL52 +++ NuJohj7nalWnpiMfC1zl3r77QDt2 ++++ false
05-17 03:40:35.805 22488-22488/com.furkan.profil I/Database: https://profil-95859.firebaseio.com/friends/552nQquUrtSgbVVLgXxfxOh6SL52 +++ vIYkKWAWwKTRD4NQfixzcNnfk6X2 ++++ false

`

尝试在
onDataChange
方法中返回
ret
,如下所示:

@Override
public void onDataChange(DataSnapshot snapshot) {
    ret= (Boolean) snapshot.child(uID).getValue();
    Log.i("Database", mDatabase.child(user.getUid()).toString()+" +++ "+uID+" ++++ "+ ret.toString());
    doStuff(ret); // user ret here
}

return ret
将在
onDataChange
之前运行
return ret
不要等到
onDataChange()
onCancelled()
完成,因为它们在不同的线程中运行

mDatabase.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        // this will run in different thread 
        ret = (Boolean) snapshot.child(uID).getValue(); // the value that from Firebase is here
    }
});
// this will run before onDataChange
return ret;   
所以你需要把你的功能改成

public void checkFriendThenDoSomeThing(final String uID){
    mDatabase.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
           ret= (Boolean) snapshot.child(uID).getValue(); 

           // DO SOMETHING after get ret from Firebase
        }
        ...
    });
}
=======
或者如果您想从另一个
活动
呼叫
检查朋友(…)
,您需要:
首先,为
Listener

public interface CheckFriendSuccessListener {
    void onSuccess(boolean value);
}
侦听器
放入您的函数,如

public void checkFriend(final String uID, CheckFriendSuccessListener onCheckFriendSuccessListener){
    mDatabase.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            boolean ret= (Boolean) snapshot.child(uID).getValue();
            onCheckFriendSuccessListener.onSuccess(ret);
        }
    });
}
那么当你给朋友打电话的时候

checkFriend("someUserID", new CheckFriendSuccessListener() {
    @Override
    public void onSuccess(boolean value) {
         // DO SOMETHING after check friend successful
    }
});

onDataChange是一个空函数。当我试图这样做的时候,它显然会给我一个错误。@FurkanÖyken Ohh。。你说得对。然后,您应该使用
ret
调用另一个函数,例如:
verifyFriend(uID,ret)
那么该函数可以执行您最初打算执行的操作。我理解您的观点。我在顶部声明了
boolean ret=false
。这就是为什么我在想,我在检索错误的数据。但我从其他活动调用此函数。我必须向它返回一些数据。@FurkanÖyken我已经更新了我的答案,请检查我检查过了。在onDataChanged()中还添加了
if(snapshot.hasChild(uID))
。否则它将返回null。但我现在解决了。谢谢你的帮助。多亏了你,我才学会了界面