从实时传输到Firestore加载数据并在文本视图中显示

时间:2019-03-13 18:22:15

标签: java android firebase firebase-authentication google-cloud-firestore

我正在将数据库从实时迁移到Firestore,并且遇到了一些问题。当前,我正在尝试从数据库中加载数据,并将其显示在文本视图中。这就是我的工作

    @Override
protected void onStart() {
    super.onStart();

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
    String current_uid = mCurrentUser.getUid();

    db.collection("Users").document(current_uid).addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
            Log.d(TAG, "hello did this work");
            String username = documentSnapshot.getString("name");
            mName.setText(username);

        }
    });
}

当我运行调试器 username 等于null时,因此我认为它没有接收到数据,因此我已经仔细检查了引用。我也相信,这可能与获取UID有关,但我不确定并且似乎无法弄清楚为什么它不会收到下面的完整数据类 https://pastebin.com/n6HVABM2

数据库:database

实时的先前代码:https://pastebin.com/WQeimx7s

我在哪里:

好,所以我附加了一个authstate侦听器,以确保获取uid,但侦听器内部的代码块未运行,并且我不知道为什么。我试图在onStart上使用mAuth.addAuthStateListener(mAuthListner);,但是我使用的代码无效

    @Override
protected void onStart() {
    super.onStart();
    //do i have to attach this listner?
    //mAuth.addAuthStateListener(mAuthListner);

    mAuth = FirebaseAuth.getInstance();

    mAuthListner = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            String currentUser = mAuth.getCurrentUser().toString();

            db.collection("Users").document(currentUser).addSnapshotListener(new EventListener<DocumentSnapshot>() {
                @Override
                public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
                    Log.d(TAG, "hello did this work");
                    String username = documentSnapshot.getString("name");
                    mName.setText(username);

                }
            });

        }
    };
}

1 个答案:

答案 0 :(得分:0)

当我将新创建的用户添加到数据库时,我没有使用用户ID作为文档的名称,因此当我尝试引用它时,没有任何更改,因此在添加用户时将它使用的uid附加到随机字符串。