public void getFoodItem( String foodNum) {
dbReference=firebaseDatabase.getReference("Food"+foodNum);
dbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
FoodItem foodItem = dataSnapshot.getValue(FoodItem.class);
Log.d("h", "Gotdata" + foodItem.getImage());
//Data can be taken from here, assigning to a global variable results null
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我可以使用 onDataChange()
获取数据方法,但我无法找到在全局范围内捕获 foodItem 对象的方法。我需要返回 foodItem 对象。我该怎么做?
最佳答案
定义接口(interface):
interface FoodListener {
void onFoodReceived(FoodItem foodItem);
void onError(Throwable error);
}
然后修改你的方法:
public void getFoodItem(String foodNum, final FoodListener listener) {
dbReference=firebaseDatabase.getReference("Food"+foodNum);
dbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
FoodItem foodItem = dataSnapshot.getValue(FoodItem.class);
Log.d("h", "Gotdata" + foodItem.getImage());
listener.onFoodReceived(foodItem);
}
@Override
public void onCancelled(DatabaseError databaseError) {
listener.onError(databaseError.toException());
}
});
}
现在,getFoodItem()
方法的调用者可以传递一个监听器,该监听器将在检索食物或发生错误时调用。
关于java - 如何从 Android 中的 firebase 返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48501384/