2016-10-16 10 views
0

これは私の現在のコードですが、動作しません。Firebaseリアルタイムデータベースを使用して変更を聞かずに単一の文字列値を取得する

私はFirebaseリアルタイムデータベースに

を使用して変更をリッスンせずに、単一の文字列値(データ)を取得しようとしています。しかし、私はこのコードを実行するたびに、私は[0]ヌルとして電子メールを取得します。

また、Log.e("Email#1", "hello");は私のログカットには表示されないので、実際にはaddListenerForSingleValueEvent()に入ることはありません。

username=(EditText)findViewById(R.id.username); 
    password=(EditText)findViewById(R.id.password); 


    Firebase.setAndroidContext(this); 
    final Button login=(Button)findViewById(R.id.loginbtn); 
    final Firebase ref=new Firebase("//fir-learn-4991c.firebaseio.com/Users/Sriharsha/email"); 

    //assert login != null; 
    assert login != null; 
    login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      login.setText("Loading..."); 

      final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
      DatabaseReference dref=database.getReference("email"); 

      final String user=username.getText().toString(); 
      final String[] email = new String[1]; 
      dref.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
        Message post = dataSnapshot.getValue(Message.class); 
        Log.e("Email#1","hello yo"); 
        //System.out.println(post); 
        //Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue(); 
        email[0]=post.getEmail(); 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        System.out.println("The read failed: " + databaseError.getCode()); 
       } 
      }); 

これはクラスです:メッセージ: -

public class Message { 
    private String email; 
    public Message(){ 

    } 
    public void message(String email) 
    { 
     this.email=email; 
    } 
    public String getEmail() 
    { 
     return email; 
    } 

} 

そして、これが私のFirebaseデータベースです: Firebase database picture

+0

データベースのルートに既定のポイントでDREF。これを試してください:DatabaseReference dref = database.getReference(); dref.child( "Users")。addListenerForSingleValueEvent –

答えて

0

あなたのリスナーはそれが存在しない場合は、参照email(上設定されていますしたがってリスナーを起動しません)、あなたの電子メール文字列は実際にはUsers/<username?>/emailに格納されているようです。それに応じてdrefを変更することができます。

+0

あなたが上に示唆したすべての可能な方法を試したが、まだプログラムがリスナーに入ることはないので、私はそれを置くようアドバイスするだろうか?私は助けが必要です!!私はユーザーの電子メールを取得しようとしています。 – harsh

+0

あなたの現在のものではなく、 'dref = database.getReference(" Users ")。child(user).child(email)'を設定することをお勧めします。 –

0

私はそれを解決しました。みんなありがとう。私はちょうどString Arrayを使用せず、FirebaseからストレートString値を得るために別のメソッドでも作成しました。

Firebase ref=new Firebase("//fir-learn-4991c.firebaseio.com/Users/"+user); 
      Firebase ref1=ref.child("email"); 
      final String pass=password.getText().toString(); 
      //Log.e("dref",dref.toString()); 
      ref1.addValueEventListener(new com.firebase.client.ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String post=dataSnapshot.getValue(String.class); 
        Log.v("Email#1",post); 
        authentication(post,pass,user); 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 

       } 
      }); 

      Log.e("Email",""+ email[0]); 
      Log.e("Ref",""+ ref); 

     } 

    }); 
} 
public void newActivity(String email, String pass, String user) 
{ 

    Intent intent = new Intent(Login.this, THSTheApp.class); 
    intent.putExtra("email",email); 
    intent.putExtra("UserName", user); 
    intent.putExtra("Password", pass);// pass your values and retrieve them in the other Activity using keyName 
    startActivity(intent); 
} 
public void x() 
{ 
    Toast.makeText(Login.this, "There Was A Problem", 
      Toast.LENGTH_SHORT).show(); 
    username.setText(""); 
    password.setText(""); 

} 
public void authentication(final String email1, final String pass,final String user) 
{ 
    mAuth = FirebaseAuth.getInstance(); 
    mAuth.signInWithEmailAndPassword(email1, pass).addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()) 
      { 
       newActivity(email1,pass,user); 
      } 
      else if (!task.isSuccessful()) { 
       x(); 
      } 
     } 
    }); 
} 

}

関連する問題