我在MainActivity.java中有一个textview。 Firebase数据库中存储了5个字符串(句子)。我想要的是每次MainActivity.java启动时,都应该从数据库中获取一个新字符串,并且必须将其显示在textview中。但是它只获取第一个字符串。我不确定如何使这项工作!有什么解决方法吗?任何帮助表示赞赏。

MainActivity.java

public class Gridshow extends AppCompatActivity{
TextView myText;
private DatabaseReference database;
@Override
    protected void onCreate(Bundle SavedInstanceState) {
        super.onCreate(SavedInstanceState);
        myText = (TextView) findViewById(R.id.Attri);
database = FirebaseDatabase.getInstance().getReference("StringList");
        database.child("String1").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String sentName = dataSnapshot.getValue(String.class);
            myText.setText(sentName);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}


子文件示例:

{
     "StringList" : {
      "String1" : "Valley Rovers",
      "String2" : "John Murphy",
      "String3" : "Hello all",
      "String4" : "See you all",
      "String5" : "Hey all"
     }
    }

最佳答案

问题是您直接对FB说只在这里检索第一个字符串:

 database.child("String1").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String sentName = dataSnapshot.getValue(String.class);
            myText.setText(sentName);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


您应该检索整个列表并随机选择新字符串:

ArrayList<String> stringList = new ArrayList<>();
 database.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           Map<String, String> entries = (Map<String, String>)   dataSnapshot.getValue();
            stringList.addAll(entries.values());
            selectString(stringList);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


public void selectString(ArrayList<String> list){
   Random ran = new Random();
   int x = ran.nextInt(list.size());
   myText.setText(list.get(x));
}

10-05 21:13
查看更多