2017-05-24 10 views
0

データベースで単一の値を取得したいのですが、単一の文字列を渡すのが難しいです。私のコードは以下の通りです:onDataChangeから値を返す方法は?

FirebaseUser user = firebaseAuth.getCurrentUser(); 
      databaseReference = FirebaseDatabase.getInstance().getReference("USERS").child(user.getUid()).child("name"); 

      databaseReference.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String name = (String) dataSnapshot.getValue(); 
        editTextName.setText(name); 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

      String name2 = editTextName.getText().toString().trim(); 

これ以外の文字列名にはどうすればアクセスできますか? 私はそれで私のコードを編集したが、短い答えはメンバ変数になり

invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 
+0

Firebaseはデータを非同期に読み込みます。それを受け入れ、それに対処するためにコードを変更するのが最善です。 https://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener –

答えて

0

と言うOnDataChangeの方法は、実際にそれを割り当てまで、しかし、それは(あなたが何もネットワークに接続されていない場合は決してしない可能性がある)nullになります

どこに値が必要ですか? TextViewで? onDataChange

より複雑なものが必要な場合は、onDataChangeとは別のメソッドを呼び出し、パラメータを渡してください。

自分自身を同期コードに強制しないでください

+0

私はそれを文字列として格納し、それをアクティビティの他の部分で使用したいと考えています – DarknessNight

+0

あなたのエラー質問はEditTextを割り当てたことがないことを示します。代わりにそれを修正することをお勧めします –

関連する問題