我正在尝试将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;
}
}