Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
java:我想从内部类返回快照键,但得到的是空变量_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

java:我想从内部类返回快照键,但得到的是空变量

java:我想从内部类返回快照键,但得到的是空变量,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,这里我将x和y变量与Firebase数据库进行比较。如果我找到正确的结果,我想返回密钥 private String checkParkeer() { final Integer parkX = 4; final Integer parkY = 1; final String[] result = new String[1]; final FirebaseDatabase database = FirebaseDatabase.getInstance();

这里我将x和y变量与Firebase数据库进行比较。如果我找到正确的结果,我想返回密钥

private String checkParkeer() {
    final Integer parkX = 4;
    final Integer parkY = 1;
    final String[] result = new String[1];

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference ref = database.getReference("parkeerpaal");

    ref.addValueEventListener(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot dataSnapshot){

            for (DataSnapshot snapshot : dataSnapshot.getChildren()){

                Log.d("test", snapshot.getKey());

                Integer newX = Integer.parseInt(snapshot.child("x").getValue().toString());
                Integer newY = Integer.parseInt(snapshot.child("y").getValue().toString());

                if (newX <= parkX+2 && newX >= parkX-2) {
                    if (newY <= parkY + 2 && newY >= parkY - 2) {
                        result[0] = snapshot.getKey();
                    }
                }
                break;
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    Log.d("result", result[0]);
    return result[0];
}
private String checkParkeer(){
最终整数parkX=4;
最终整数parkY=1;
最终字符串[]结果=新字符串[1];
final FirebaseDatabase=FirebaseDatabase.getInstance();
final DatabaseReference ref=database.getReference(“Parkeepaal”);
ref.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Log.d(“test”,snapshot.getKey());
整数newX=Integer.parseInt(snapshot.child(“x”).getValue().toString());
整数newY=Integer.parseInt(snapshot.child(“y”).getValue().toString());
如果(newX=parkX-2){
如果(newY=parkY-2){
结果[0]=snapshot.getKey();
}
}
打破
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
Log.d(“结果”,结果[0]);
返回结果[0];
}
现在是
Log.d(“test”,snapshot.getKey())记录“P1”(这是我需要的结果)

但是当我把它放在result中时,
Log.d(“result”,result[0])
返回结果[0]给出错误


这是我第一次做这件事。我如何解决这个问题?我做错了什么?

您不能简单地在
onDataChange()
方法之外返回该值,因为该方法具有
异步行为,这意味着在您尝试从数据库获取数据之前,就调用了该方法。在您的情况下,一个快速修复方法是仅在
onDataChange()
方法中使用该值,或者更好的解决方案是使用我的答案的最后一部分,使用您自己的回调,您可以在
onDataChange()
方法之外使用该值