0

Android和Firebase的新手,開發了兩個應用程序,其中一個將數據發送到Firebase數據庫,另一個將從數據庫檢索數據。未在textview中檢索到的Firebase數據

數據已成功添加到Firebase控制檯中,但是當我在其他應用程序中檢索數據時,只顯示數據的一個節點,但是當我通過調試代碼來檢查代碼時,所有數據都會顯示,但在textview中只顯示一個節點被顯示。

下面是我爲檢索代碼的代碼 -

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(仍然有來研究)。

下面是數據的火力控制檯

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

在應用輸出上的JSON,我只得到 -

Name: Name3 
Number: 8888888 
Age: 22 

回答

1

你必須在循環動態創建下一個數據的TextView,你去掉元素:

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

並將此TextView添加到佈局。

如果你想在一個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.使用CardView和TextView擴展XML佈局(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); 
    }