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

标签 java android firebase firebase-realtime-database

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

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()); 记录“P1”(这是我需要的结果)

但是当我放到result中时,Log.d("result", result[0]);或者return result[0];报错。

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

最佳答案

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

关于java:我想从内部类返回快照键但得到空变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355892/

相关文章:

java - 找不到参数的方法实现() [DefaultExternalModuleDependency{group ='com.google.firebase' ,

android - 如何在不删除以前版本生成的数据的情况下安装 AIR android 应用程序

android - 为什么 BroadcastReceiver 在使用 MediaPlayer 时会崩溃?

swift - 在 Swift 中使用 Firebase,如何从集合中提取文档以在 TextView 中显示?

java - Java 中 Thread 的自定义实现 : Is it possible though JNI?

java - URLClassLoader 找不到类

java - 保存到数据库时日期以不同的格式保存

android - BroadcastReceiver.onReceive 不为 PHONE_STATE 调用

firebase - Flutter firestore 复合查询

java - DataSnapshot 无法创建自定义对象