0

Новое для Android и Firebase. Разработано два приложения, в которых один отправит данные в базу данных firebase, а другие получат данные из базы данных.Данные Firebase не получены в текстовом виде

Данные успешно добавлены в консоль firebase, но когда я извлекаю данные в другом приложении, отображается только один узел данных, но когда я проверяю отладочную информацию, все данные отображаются, а в текстовом виде только один отображается узел.

Ниже мой код для получения кода -

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

} 

Теперь то, что я хочу сделать, это отобразить все данные в разных TextViews (один пользователь один TextView) или можно использовать cardview (еще надо изучить, что).

Ниже JSON данных на firebase консоли

{ 
"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()) ... 

и добавить этот текст в макет.

Если вы хотите, чтобы показать в одном TextView изменить код:

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

To:

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

Это работает, вы можете также направлять, как отображать данные в различных режимах карты – jshjy

+0

1. Создать отдельный макет XML с CardView и TextView внутри , 2. Добавить Empty LinearLayout (вертикальная ориентация) в вашей деятельности. 3. Надуйте свой XML-макет с помощью CardView и TextView (Google, как программировать раздувание представления из XML). 4. Установите текст в TextView в завышенном кардвале. 5. Вызовите ваш LinearLayout из Activity .addView (cardViewInflated) 6. Шаги 3 - 5 повторяются в цикле вместо вызова setText, как вы делаете сейчас. – kenzo

0

Проблема, что вы имели, потому что вы переписав TextView с каждым новым снимком.

Один из способов решить эту проблему, чтобы создать больше 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); 
    }