我对Firebase实时数据库有疑问。
我正在尝试在我的程序中执行书签选项,允许用户存储他/她最喜欢的页面,但是每当我尝试从我的firebase数据库中检索数据时,在方法返回值之后数据将被恢复
public static boolean checkIfBookmarked(final String title){
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final DatabaseReference userBookmarks = FirebaseDatabase.getInstance().getReference().child("users")
.child(user.getUid()).child("bookmarks");
final boolean[] exists = new boolean[1];
userBookmarks.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
exists[0] = dataSnapshot.child(title).exists() ;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return exists[0];
}
答案 0 :(得分:1)
Firebase使用回调方法从服务器获取数据。在您的情况下,return语句将在回调来自Firbase之前执行。您可以尝试将回调方法传递给您的函数,并在触发Firebase的回调时执行该操作。
public static void checkIfBookmarked(final String title, callbackFunction){
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final DatabaseReference userBookmarks = FirebaseDatabase.getInstance().getReference().child("users")
.child(user.getUid()).child("bookmarks");
final boolean[] exists = new boolean[1];
userBookmarks.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
exists[0] = dataSnapshot.child(title).exists() ;
//execute your callback function here
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return;
}
选中此项以查看如何将函数作为参数传递。 Passing function as a parameter in java
另一种方法是将代码移动到OnDataChange方法
答案 1 :(得分:0)