在 Android Studio 中正确使用 Firebase-realtime 并避免重复代码

问题描述 投票:0回答:0

我在 android studio java 上使用 firebase-realtime。 我有几个从 Firebase 读取和写入数据的类。 做到这一点并避免代码重复的最佳方法是什么? 我尝试使用名为“FirebaseManager”的静态 singelton 类来保存所有 firebase 函数。 我在尝试读取数据时没有得到结果,我知道这是因为 Firebase 异步工作。 有没有办法解决这个问题或在我的课堂上使用 firebase 的更好方法?谢谢。

public class FirebaseManager {

    private static FirebaseManager instance;
    private static FirebaseAuth mFirebaseAuth;
    private static FirebaseDatabase mFirebaseDatabase;

    private FirebaseManager() {
        mFirebaseAuth = FirebaseAuth.getInstance();
        mFirebaseDatabase = FirebaseDatabase.getInstance();
    }

    public static synchronized FirebaseManager getInstance() {
        if (instance == null) {
            instance = new FirebaseManager();
        }

        return instance;
    }

    public FirebaseAuth getFirebaseAuth() {
        return mFirebaseAuth;
    }

    public FirebaseDatabase getFirebaseDatabase() {
        return mFirebaseDatabase;
    }

public static List<GameScore> getQuizScoresFromFirebase(){
    FirebaseUser firebaseUser = mFirebaseAuth.getCurrentUser();
    DatabaseReference mDatabaseReference;

    List<GameScore> gamescores = new ArrayList<>();

    if (firebaseUser != null){

        mDatabaseReference = mFirebaseDatabase.getReference("Users/" + firebaseUser.getUid() + "/quizScoreList");
        mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //checking if QuizScoresList exists in the current firebase user
                if (dataSnapshot.exists()){
                    long size = dataSnapshot.getChildrenCount();
                    Log.d("MyTag", "dataSnapshot is exists " + "dataSnapshot count: "+ size);
                    for (DataSnapshot scoreSnapshot : dataSnapshot.getChildren()) {
                        GameScore gs = scoreSnapshot.getValue(GameScore.class);
                        Log.d("MyTag","GameScore: "+ gs.toString());
                        gamescores.add(gs);
                        // here gamescores look good and filled with data
                        Log.d("MyTag","gamescores: "+ gamescores.size());
                    }

                } else {
                    // need to be hundle
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                //Toast.makeText(QuizScore.this, "Error on get scores from Firebase", Toast.LENGTH_SHORT).show();
            }
        });
    }
    return gamescores;
}
java android firebase firebase-realtime-database
© www.soinside.com 2019 - 2024. All rights reserved.