【问题标题】:NullPointerException while getting data via another class from firebase DatabaseNullPointerException,同时通过另一个类从 firebase 数据库获取数据
【发布时间】:2017-01-29 14:10:35
【问题描述】:

我创建了一个名为 UserInfo 的类来从 firebase 数据库中获取所有用户数据。这是我用来获取 Firebase 数据(用户名)的方法。

 public String getUsername() {
        final Firebase usernameLink = new Firebase(firebaseLink + getUid());
        usernameLink.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                username = (String) dataSnapshot.getValue();
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
            }
        });
        return username;
    }

并且firebase链接没有问题。它也给出了用户名。

但在另一个班级我想获得用户名。

所以我制作了那个类的对象..

UserInfo userInfo = new UserInfo();

为了获取用户名,

username = userInfo.getUsername();

我在 onCreate 方法中编写了前面的代码。

在我的应用程序中单击按钮时,我正在尝试将用户名添加为我的孩子。

send_request_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                request_text = request_msg.getText().toString();
                URL = new Firebase(firebaseUrl);
               Firebase addChild = URL.child(username);
                                addChild.setValue("hhhhh");        
                        }
                );

当我用一些虚拟的预定义字符串数据替换用户名时,这段代码可以工作。但是当我添加用户名时,它给了我以下错误。

java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
 at com.firebase.client.Firebase.child(Firebase.java:187)
 at com.buckydroid.anonchat.SendRequest$1$1.onClick(SendRequest.java:67)
 at android.view.View.performClick(View.java:5637)
 at android.view.View$PerformClick.run(View.java:22433)
 at android.os.Handler.handleCallback(Handler.java:751)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6126)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

【问题讨论】:

  • 请耐心等待 --- 你刚刚问这个问题不是 25 分钟前!还有哪一行抛出NPE,哪个变量为null?
  • 用户名正在抛出 NPE,对不起@HovercraftFullOfEels
  • 这一行是 Firebase addChild = NotificationURL.child(userInfo.getUsername());
  • 那么用户名绝对是不是导致NPE被抛出的变量。也许是 userInfo 或 NotificationURL——你测试过哪个是空的吗?如果没有,你会想要这样做。
  • 正如我所说,更改 NotificationURL.child(username);到 NotificationURL.child("username");或其他一些虚拟值一切正常

标签: java android firebase nullpointerexception


【解决方案1】:

在运行此方法之前,请确保您的变量 firebaseLink 已初始化并已分配给某些数据。我看到的 NullPointerException 输出告诉我您正在尝试将 null 变量传递给 Firebase 类的 pathString 变量。

【讨论】:

  • firebaseLink 是正确的。正如我所说,当我用一些虚拟字符串替换用户名变量时,它可以工作。
  • 在将变量传递给 child(var) 时尝试将变量转换为 (String)。
  • 你确定 user me 变量被初始化了吗?在调用 firebase.child() 之前执行 system.out.println(username) 并查看它是否打印 null
  • 是的,用户名为空
  • 轰隆隆。在您的代码中向后移动并尝试找出用户名未初始化的原因,然后再试一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2016-02-18
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多