java:我想从内部类返回快照键,但得到的是空变量
这里我将x和y变量与Firebase数据库进行比较。如果我找到正确的结果,我想返回密钥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();
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()
方法之外使用该值