2017-01-29 5 views
-1

UserInfoというクラスを作成し、firebaseデータベースからすべてのユーザーデータを取得しました。 firebaseデータ(ユーザ名)を取得するために私が使用した方法を次に示します。firebaseデータベースから別のクラスを介してデータを取得中にNullPointerExceptionが発生しました

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; 
    } 

炎ベースリンクに問題はありません。そしてそれはユーザー名も与えます。

しかし、別のクラスで私はユーザー名を取得したいと思います。

だから、私は私のonCreate方法で、以前のコードを書いた

UserInfo userInfo = new UserInfo(); 

...そのクラスのオブジェクトを作り、ユーザ名を取得するには、

username = userInfo.getUsername(); 

私のアプリでボタンをクリックすると、私は自分の子としてユーザー名を追加しようとしています。

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) 
+1

忍耐力を持ってください---あなたは25分前にこの質問をしました!どの行がNPEをスローし、どの変数がヌルですか? –

+0

ユーザ名がNPEを投げていて、申し訳ありません。@HovercraftFullOfEels – Doge

+0

この行はFirebaseです。addChild = NotificationURL.child(userInfo.getUsername()); – Doge

答えて

1

このメソッドを実行する前に、変数firebaseLinkが初期化され、データに割り当てられていることを確認してください。私が見ているNullPointerExceptionの出力は、あなたがFirebaseクラスのpathString変数にnull変数を渡そうとしていることを伝えています。

+0

firebaseLinkが正しいです。私がusername変数をいくつかのダミー文字列に置き換えると言ったように、それは動作します。 – Doge

+0

変数を子(var)に渡すときに変数を(String)にキャストしてみてください。 – milkman

+0

同じ問題.. @milkman – Doge

関連する問題