未在文本视图中检索到 Firebase 数据
Firebase data not retrieved in textview
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
您必须在遍历元素的循环中使用下一个数据动态创建 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);
您遇到的问题是因为您正在用每个新快照覆盖您的文本视图。
解决它的一种方法是以编程方式创建更多文本视图:
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);
}
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
您必须在遍历元素的循环中使用下一个数据动态创建 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);
您遇到的问题是因为您正在用每个新快照覆盖您的文本视图。
解决它的一种方法是以编程方式创建更多文本视图:
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);
}