0

AndroidとFirebaseには、firebaseデータベースにデータを送信する2つのアプリケーションが開発され、データベースからデータを取得する2つのアプリケーションが新しくなりました。ファイアベースのデータがテキストビューで取得されない

データが正常にfirebaseコンソールに追加されますが、私は他のアプリケーションでデータを取得していたときにデータの一つのノードのみが表示されますが、私は、すべてのデータが表示されているコードをデバッグを通じてますが、単一のみのTextViewにチェックしていたときにノードが表示されます。以下は

コードを取得するための私のコードです - 今、私はすべての異なるtextviewsのデータ(1人のユーザー1つのTextView)またはcardviewを使用することができますが表示されて何をしたいのか

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

TextView tv,tv1; 
Button btn; 
FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("users"); 
private DatabaseReference mDatabase; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (!FirebaseApp.getApps(this).isEmpty()) { 
     // Not in crash process. Do your Remote Config init here. 
     System.out.println("ss"); 
    } 

    tv = (TextView) findViewById(R.id.textView3); 
    tv1 = (TextView) findViewById(R.id.textView2); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    btn = (Button) findViewById(R.id.button2); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      ValueEventListener valueEventListener = myRef.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
        for (DataSnapshot postSnapshot : snapshot.getChildren()) { 
         User user = postSnapshot.getValue(User.class); 
         String string = "Name: " + user.getUsername() + "\n Number : " + user.getNumber() + "\n Age: " + user.getAge(); 
         tv.setText(string); 


        } 
       } 

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

} 

(まだことを勉強しました)。

以下

は、アプリケーション上のfirebaseコンソール上のデータのJSON出力で

{ 
"users" : { 
"Name1" : { 
    "age" : "18", 
    "number" : "1234678", 
    "username" : "Name1" 
}, 
"Name2" : { 
    "age" : "20", 
    "number" : "99999999", 
    "username" : "Name2" 
}, 
"Name3" : { 
    "age" : "22", 
    "number" : "8888888", 
    "username" : "Name3" 
} 
} 
} 

ですが、私は唯一取得しています -

Name: Name3 
Number: 8888888 
Age: 22 

答えて

1

あなたはどこ動的ループの中で次のデータとのTextViewを作成する必要があります要素を移動する:

for (DataSnapshot postSnapshot : snapshot.getChildren()) ... 

このテキストビューをレイアウトに追加します。

あなたのコード変更1つのTextViewに表示する場合:

String string = "Name: " + user.getUsername() + "\n Number : " + user.getNumber() + "\n Age: " + user.getAge(); 
tv.setText(string); 

へ:

String string = tv.getText() + "\nName: " + user.getUsername() + "\n Number : " + user.getNumber() + "\n Age: " + user.getAge(); 
tv.setText(string); 
+0

作品、あなたはまた、別のカードビューでデータを表示する方法を導くことができる – jshjy

+0

1. CardViewとTextViewの内部で別のXMLレイアウトを作成します。 。 2.アクティビティに空のLinearLayout(垂直方向)を追加します。 3. XMLレイアウトをCardViewとTextViewで膨張させます(XMLからビューをプログラム的に膨張させる方法) 4.テキストをTextViewに設定します(inflated cardViewで) 5.アクティビティからのLinearLayout .addView(cardViewInflated) 6.ステップ3 - 5は、今のようにsetTextを呼び出すのではなく、ループ内で繰り返します。 – kenzo

0

あなたはすべての新しいスナップショットを使用してのTextViewを上書きしているので、あなたの持っている問題を。

それを解決する1つの方法は、プログラムよりtextviewsを作成することです:

for (int i = 0; i < length of your list ; i++) { 
     final TextView valueTV = new TextView("yourActivity"); 
     valueTV.setText(string); 
     valueTV.setTextColor(Color.BLACK); 
     valueTV.setTextSize(20); 
    } 
関連する問題