java:我想从内部类返回快照键但获取空变量

时间:2018-01-20 12:01:38

标签: 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();
    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];
}

现在Log.d("test", snapshot.getKey());日志&#34; P1&#34; (这是我需要的结果)

但是当我把它放在结果中时,Log.d("result", result[0]);return result[0];会出错。

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

1 个答案:

答案 0 :(得分:1)

您不能简单地在onDataChange()方法之外返回该值,因为此方法具有asynchronous behaviour,这意味着甚至在您尝试从数据库获取数据之前就会调用此方法。在您的情况下快速修复将仅在onDataChange()方法中使用该值或更好的解决方案,将使用http://api.jquery.com/jquery.getjson/的答案的最后部分,其中使用您自己的回调,您可以在onDataChange()方法之外也可以使用该值。