每次应用启动时,都应在textview中显示新文本

时间:2018-02-20 13:09:28

标签: android firebase firebase-realtime-database

我在MainActivity.java中有一个textview。有5个字符串(句子)存储在firebase数据库中。我想要的是每次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"
     }
    }

3 个答案:

答案 0 :(得分:1)

问题是你直接告诉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));
}

答案 1 :(得分:0)

使用此

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

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

答案 2 :(得分:0)

嗯,在这一行:

database.child("String1").addValueEventListener

您只是获取String1。你应该使用这样的东西:

database.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(int i = 0;i<dataSnapshot.getChildren().size();i++){
               if(i==positionOfStringYouWant){                 
                  String sentName = dataSnapshot.getValue(String.class);
                   myText.setText(sentName);
               }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });