【问题标题】:Listener not working for firebase datareference in java侦听器不适用于 java 中的 firebase 数据引用
【发布时间】:2019-11-30 23:06:16
【问题描述】:
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.database.*;
import com.google.gson.Gson;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Logger
/**
*
* @author adnan
*/
public class Json_Reader {

private final static Logger log
        = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

public static void intializeFirebase() throws FileNotFoundException, IOException {

    FileInputStream serviceAccount =
            new FileInputStream("/home/adnan/Downloads/cryleticstest-firebase-adminsdk-avbul-f5ea5a09ca.json");

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setDatabaseUrl("https://cryleticstest.firebaseio.com")
            .build();

    FirebaseApp.initializeApp(options);

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    System.out.println(FirebaseApp.getApps());
    DatabaseReference ref = database.getReference();
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            System.out.println(dataSnapshot.getChildrenCount());
            Object object = dataSnapshot.getValue(Object.class);
            String json = new Gson().toJson(object);
            log.info(json);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            log.info("error");

        }
    });


}


public static void main(String[] args) throws IOException {

    intializeFirebase();

}
 }

我正在尝试连接我的 firebase 数据库并从那里获取 JSON 结构。 但是我的 ref(reference variable) 中的 Listener 不起作用。我猜该程序连接到 Firebase 控制台,但它没有获取我认为的任何内容,因为侦听器不工作。 onDataChanged 或 onCancelled 方法都不起作用。

【问题讨论】:

    标签: java firebase firebase-realtime-database


    【解决方案1】:

    如果我没记错的话,Java 程序将在不等待加载数据的情况下退出。您必须通过使用一些 Java 同步原语显式使其等待,例如:

    final CountDownLatch sync = new CountDownLatch(1);
    
    DatabaseReference ref = database.getReference();
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            System.out.println(dataSnapshot.getChildrenCount());
            Object object = dataSnapshot.getValue(Object.class);
            String json = new Gson().toJson(object);
            log.info(json);
            sync.countDown();
        }
    
        @Override
        public void onCancelled(DatabaseError error) {
            log.info("error");
            sync.countDown();
        }
    });
    
    sync.await();
    

    另见:

    【讨论】:

    • 很好的答案!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2012-06-18
    • 2014-03-16
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多