Java 如何从Android中的firebase返回值?
我可以使用Java 如何从Android中的firebase返回值?,java,android,multithreading,firebase,firebase-realtime-database,Java,Android,Multithreading,Firebase,Firebase Realtime Database,我可以使用onDataChange()方法获取数据,但我无法找到在全局范围内捕获foodItem对象的方法。我需要返回foodItem对象。如何操作?对addValueEventListener的调用是异步的,因此当在onDataChange()方法中收到数据时,您可以更新UI 如果要将其存储在全局变量中,只需在方法外部声明它并在回调中更新: public void getFoodItem( String foodNum) { dbReference=firebaseDatabase
onDataChange()
方法获取数据,但我无法找到在全局范围内捕获foodItem对象的方法。我需要返回foodItem对象。如何操作?对addValueEventListener的调用是异步的,因此当在onDataChange()
方法中收到数据时,您可以更新UI
如果要将其存储在全局变量中,只需在方法外部声明它并在回调中更新:
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) {
}
});
}
对addValueEventListener的调用是异步的,因此当在
onDataChange()
方法中收到数据时,您可以更新UI
如果要将其存储在全局变量中,只需在方法外部声明它并在回调中更新:
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) {
}
});
}
定义一个接口:
private FoodItem foodItem;
public void getFoodItem(String foodNum){
// ...
dbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
foodItem = dataSnapshot.getValue(FoodItem.class);
// now update the UI
}
// ...
}
然后修改您的方法:
interface FoodListener {
void onFoodReceived(FoodItem foodItem);
void onError(Throwable error);
}
现在,getFoodItem()
方法的调用方可以传递一个侦听器,该侦听器将在检索食物或发生错误时被调用。定义一个接口:
private FoodItem foodItem;
public void getFoodItem(String foodNum){
// ...
dbReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
foodItem = dataSnapshot.getValue(FoodItem.class);
// now update the UI
}
// ...
}
然后修改您的方法:
interface FoodListener {
void onFoodReceived(FoodItem foodItem);
void onError(Throwable error);
}
现在,
getFoodItem()
方法的调用方可以传递一个侦听器,该侦听器将在检索食物或发生错误时被调用。获取一个空对象引用。java.lang.NullPointerException:尝试调用虚拟method@Waesz每次数据更改时都会调用您的侦听器,这是您想要的吗?如果只想查询一次,则有一个addListenerForSingleValueEvent()
方法。获取空对象引用。java.lang.NullPointerException:尝试调用虚拟method@Waesz每次数据更改时都会调用您的侦听器,这是您想要的吗?如果只想查询一次,则有一个addListenerForSingleValueEvent()
方法。添加回调是什么意思?你能举个例子吗?添加回调是什么意思?你能举个例子吗?