【问题标题】:Firebase data not retrieved in textview未在 textview 中检索到 Firebase 数据
【发布时间】:2017-02-10 09:32:33
【问题描述】:

Android 和 Firebase 的新手,开发了两个应用程序,其中一个将数据发送到 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());
                }
            });

}

现在我想做的是在不同的文本视图中显示所有数据(一个用户一个文本视图)或者可以使用卡片视图(仍然需要研究)。

下面是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

【问题讨论】:

    标签: android firebase textview firebase-realtime-database android-cardview


    【解决方案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);
    

    【讨论】:

    • 行得通,能否指导一下如何在不同的卡片视图中显示数据
    • 1.使用 CardView 和 TextView 创建单独的 XML 布局。 2. 在您的活动中添加 Empty LinearLayout(垂直方向) 3. 使用 CardView 和 TextView 膨胀您的 XML 布局(谷歌如何以编程方式从 XML 膨胀视图) 4. 在膨胀的 cardView 中将文本设置为您的 TextView 5. 从 Activity 调用您的 LinearLayout .addView(cardViewInflated) 6. 步骤 3 - 5 循环重复,而不是像现在这样调用 setText。
    【解决方案2】:

    您遇到的问题是因为您正在用每个新快照覆盖您的文本视图。

    解决它的一种方法是以编程方式创建更多文本视图:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2018-12-22
      • 2019-08-20
      • 1970-01-01
      相关资源
      最近更新 更多