2017-03-01 4 views
0

現在、私はリストオブジェクトを作成し、そこに多数のフィールドを格納します。私が保存しなければならない2つのフィールドは、現在のユーザーの電子メールと名前です。私は変更を加える前にFirebaseデータベースからいくつかのフィールドを取得するにはどうしたらいいですか?

 dbRef = database.getReference().child("Users").child(emailKey); 
     dbRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      UserInfo userIn = dataSnapshot.getValue(UserInfo.class); 
      email1 = userIn.email; 
      sellerName = userIn.username; 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

このコードのビットの後、私はライン

DatabaseReference temp = dbRefL.push(); 
    temp.setValue(l); 

を持って、このコードはすべて、ボタンを押すと、私によって呼び出されると、以下のように、これらの二つのフィールドを取得しようとしています。最初にボタンを押すと、Listオブジェクト全体がFirebaseにプッシュされます。ユーザーのメールとユーザー名が空であることを除いて、ユーザーのメールとユーザー名を除いて必要な方法です。 2回目にボタンを押すと、弦はそこにあります。

これは、OnDataChangeがListオブジェクトをプッシュした後にのみ実行されるからです。これは本当ですか?リスティングオブジェクトをプッシュする前にOnDataChangeを実行するにはどうすればよいですか?

+0

私はあなたがあなたの湖底のclicklistener上の外であなたのValueEventListenerを置くべきだと思います。 –

答えて

0

リスナーonDataChange()コールバックは非同期です。あなたの電子メールとユーザー名が空白であることを理由はonDataChangeは、取得された電子メールとユーザー名の後にデータをプッシュすることを確認するために、まだ実行されていないされているので、あなたがコード上のボタンを押すとonDataChange()

dbRef = database.getReference().child("Users").child(emailKey); 
     dbRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      UserInfo userIn = dataSnapshot.getValue(UserInfo.class); 
      email1 = userIn.email; 
      sellerName = userIn.username; 

      //set up your l value 
      DatabaseReference temp = dbRefL.push(); 
      temp.setValue(l); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

内のコードを入れて電子メールとユーザー名を取得し、必要に応じてデータをプッシュする必要があります。以下のような

0

ユーザーaddValueEvenListener:

DatabaseReference map = database.getReference("field_name"); 
    map.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      String data = (String) dataSnapshot.getValue(); 


     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

      ****OR using**** 


database.getReference("field_name").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Log.e(TAG, "Field data", dataSnapshot.getValue(String.class)); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      // Failed to read value 
      Log.e(TAG, "Failed to read user", databaseError.toException()); 
     } 
    }); 
関連する問題