java - 如何在此读取方法 firebase 中更改我的值

标签 java android firebase firebase-realtime-database

我想在数据库中读取我的数据,所以我使用 firebase,当我想读取我的数据时,我使用这段代码

DatabaseReference nortjo87Ref=FirebaseDatabase.getInstance().getReference("tes");

    ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get Post object and use the values to update the UI
            value = dataSnapshot.getValue(String.class);
            Log.w("", "value is: "+ value);
            // ...
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w("", "loadPost:onCancelled", databaseError.toException());
            // ...
        }
    };

    nortjo87Ref.addValueEventListener(postListener);

我在运行栏中看到我的值已经更改,但是在此之后,当我将 TextView 设置为“value(String)”时,

ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get Post object and use the values to update the UI
            value = dataSnapshot.getValue(String.class);
            Log.w("", "value is: "+ value);
            // ...
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w("", "loadPost:onCancelled", databaseError.toException());
            // ...
        }
    };

    nortjo87Ref.addValueEventListener(postListener);

    tvText.setText(value);

该值为空,所以我想问一下,如何选择我的值(我的 TextView )

最佳答案

您需要在 onDataChange 中添加此代码 tvText.setText(value);:

ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get Post object and use the values to update the UI
            value = dataSnapshot.getValue(String.class);
            Log.w("", "value is: "+ value);
            tvText.setText(value);
            // ...
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w("", "loadPost:onCancelled", databaseError.toException());
            // ...
        }
    };

那是因为 onDataChange 是异步的,这意味着它之后的代码将在它检索完整数据之前执行,因此你在 textView 上得到了 null

关于java - 如何在此读取方法 firebase 中更改我的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451393/

相关文章:

ios - 从 Crashlytics 迁移到 Firebase 时,如何处理一个 iOS 应用程序中的多个方案/目标?

java - Spring,多个Hibernate Sessionfactories配置

java - Hibernate:在双向有序树中打乱子节点

java - BigDecimal - 检查值是否在双倍范围内

android - 从url下载pdf,在flutter中保存到android中的手机本地存储

swift - NSNumber & NSDate (swift 3)

firebase - 参数类型 'Object?' 无法分配给参数类型 'Map<String, dynamic>'

java - 有没有一种简单的方法可以解析具有 4 列的文本文件,以对具有匹配的第一个值的值进行求和/平均值?

机器人 : set the menu out/visible

java - Android:设置 RecyclerView 项目的重力