在这里,我将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];
会出错。
这是我第一次做这个事情。我该如何解决这个问题?我做错了什么?
答案 0 :(得分:1)
您不能简单地在onDataChange()
方法之外返回该值,因为此方法具有asynchronous behaviour
,这意味着甚至在您尝试从数据库获取数据之前就会调用此方法。在您的情况下快速修复将仅在onDataChange()
方法中使用该值或更好的解决方案,将使用http://api.jquery.com/jquery.getjson/的答案的最后部分,其中使用您自己的回调,您可以在onDataChange()
方法之外也可以使用该值。