Firebase和Java Play!框架未完全合作

时间:2016-11-19 07:09:22

标签: java firebase playframework firebase-realtime-database

我正在尝试将Firebase添加到我的Java Play中!框架项目。我按照这里的步骤https://firebase.google.com/docs/admin/setup进行了操作。关于服务器设置的文档很少。关于android的很多,但它没有太大帮助。

问题 我能够初始化firebase库,甚至第一次调用数据库才能成功返回,但之后所有的下一个调用都会挂起。它们永远不会在以太网中返回onCancelled或onDataChange块。我在终端以太网中没有任何例外。

这真是一种奇怪的行为。有没有人成功地将Firebase添加到Java Play中!项目?我唯一的想法是它可能与拥有有效令牌或Play使用的线程有关。

以下是我的课程:

public class FirebaseServices {

  public static FirebaseOptions fbOptions;
  public static FirebaseApp fbApp;
  public static boolean firebaseLoaded = initFirebase();

  private FirebaseServices(){
  }


  private static boolean initFirebase(){
    System.out.println("Apps: " +  FirebaseApp.getApps().size());

    if(FirebaseApp.getApps().isEmpty()){
      System.out.println("Initialize Firebase");
      try {
        fbOptions= new FirebaseOptions.Builder()
                          .setServiceAccount(new FileInputStream("conf/service-account.json"))
                          .setDatabaseUrl("https://my-project123.firebaseio.com").build();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      }
      fbApp = FirebaseApp.initializeApp(fbOptions);
    }
    return true;
  }


  final static FirebaseDatabase database = FirebaseDatabase.getInstance();

  public final static DatabaseReference USER_REF = database.getReference("User");
}

在我的用户类

public User getUserById(String unitId){

    System.out.println("getUser");
    CompletableFuture<Unit> resolution = new CompletableFuture<Unit>();

    MyFirebaseService.USER_REF.child(userId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Unit u = dataSnapshot.getValue(User.class);
            u.id = dataSnapshot.getKey();

            System.out.println("OUTPUT:"+ u.getFirstName());
            resolution.complete(u);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getCode());
            resolution.complete(null);
        }

    });

    try {
        return resolution.join();
    } catch(Exception e){
        return null;
    }
}

0 个答案:

没有答案