java - 字符串未设置为正确的值

标签 java android android-studio

我正在 Android Studio 中制作一个应用程序。由于以下问题,我被困住了。 我想将第一行中的房间字符串更改为 void onDataChange 中房间字符串的值。我已经尝试了很多东西,但它的值始终为空。

 private String room;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ref = new Firebase("https://firebase.com/users/" + getPhoneId().toString() + "/" + receivingUser.toString());
        ref.addListenerForSingleValueEvent(new ValueEventListener() {
            public void onDataChange(DataSnapshot snapshot) {
                room = (String) snapshot.child("room").getValue().toString();
                setRoom(room);
            }
            public void onCancelled(FirebaseError firebaseError) {
            }
        });
        super.onCreate(savedInstanceState);
        mFirebaseRef = new Firebase(FIREBASE_URL).child("chat/" + room);

最佳答案

您的代码的问题在于以下代码块是回调,在触发相关事件之前不会执行。

   ref.addListenerForSingleValueEvent(new ValueEventListener() {
        public void onDataChange(DataSnapshot snapshot) {
            room = (String) snapshot.child("room").getValue().toString();
            setRoom(room);
        }
        public void onCancelled(FirebaseError firebaseError) {
        }
    });

以上代码仅创建ValueEventListener子类的对象。创建类的对象不会自动调用它的所有方法。因此,上面的代码中并没有调用onDataChange方法。随后,以下代码块将始终将 room 视为 null :

mFirebaseRef = new Firebase(FIREBASE_URL).child("chat/" + room);  

关于java - 字符串未设置为正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694368/

相关文章:

android - 更改 Android Studio 调试端口

java - 弹出窗口在应该只显示一次时连续出现

android - 进行 rxJava 网络调用并根据响应在 UI 线程上推进工作的最佳方法是什么

java - 由 : org. apache.logging.log4j.LoggingException 引起:log4j-slf4j-impl cannot be present with log4j-to-slf4j

android - 使用 FlutterIcons 而不是直接使用 SVG 是否有任何性能提升?

java - 如何将解析的图像设置为背景而不是 src

xcode_backend.sh : no such file or directory. 我需要创建这个文件吗?

android-studio - 如何在 Google Play 音乐中添加 float Activity ,如 "Now Playing Music"

java - 排序算法不起作用

java - 如何在 JFrame 中动态重绘 JPanel?