在这里,我将 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/