java - 如何从 Android 中的 firebase 返回值?

标签 java android multithreading firebase firebase-realtime-database

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/

相关文章:

c# - 什么是实现线程计时器的最佳方法

java - Python和java选择哪个

java - 将类类型信息保存到文件以备后用

java - 套接字上的 JSON - 这是个好主意吗?

java - Java 中 ConcurrentHashMap 的多线程

delphi - 如何在Delphi中创建线程?

java - 为什么java中有两种不同的for循环?

java - 如何通过 SQLite 在 Android 中使用 double

java - Eclipse代码完成自动停用

android - Xamarin 中已关闭应用程序的闹钟功能