Я создал для своих пользователей активность для ввода сообщений в базу данных Firebase и другого действия для случайного вызова сообщений. Однако я не мог заставить случайный метод работать ... метод отзыва просто вызывает одни и те же сообщения снова и снова при нажатии.получение случайного значения из базы данных Firebase
Я использую и редактирование метод, имя пользователя ничтожество размещена здесь get random value android firebase java , так что я на самом деле не понимаю, как это работает ...
Вот код для записи в базу данных:
public class PostActivity extends AppCompatActivity {
private EditText PostField;
private Button postSubmit;
private DatabaseReference mDatabasePosts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);
postSubmit = (Button)findViewById(R.id.postSubmit);
postField = (EditText)findViewById(R.id.postField);
mDatabasePosts = FirebaseDatabase.getInstance().getReference().child("posts");
postSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startPosting();
}
private void startPosting() {
final String postVal = postField.getText().toString().trim();
if (!TextUtils.isEmpty(postVal)) {
//post creation
DatabaseReference newPost = mDatabasePosts.push();
newPost.setValue(postVal);
Toast.makeText(PostActivity.this, "Post registered", Toast.LENGTH_SHORT).show();
startActivity(new Intent(PostActivity.this, HomeActivity.class));
}
}
});
}
}
ничего фантазии нет ...
На загрузочном мероприятии у меня есть кнопка, в которой будет отображаться тост случайно (ну ... по крайней мере, цель) текстов, записанных в базу данных ... вот код для этого ctivity:
DatabaseReference mPost;
mPost = FirebaseDatabase.getInstance().getReference().child("posts");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPost.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long allNum = dataSnapshot.getChildrenCount();
int maxNum = (int)allNum;
int randomNum = new Random().nextInt(maxNum);
int count = 0;
Iterable<DataSnapshot> ds = dataSnapshot.getChildren();
Iterator<DataSnapshot> ids = ds.iterator();
String newPost = (String) ids.next().getValue();
while(ids.hasNext() && count < randomNum) {
ids.next();
count ++; // used as positioning.
}
Toast.makeText(HomeActivity.this, newPost,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
База данных выглядит следующим образом:
posts
L random key: "text 1"
L random key: "text 2"
L random key: "text 3"
L random key: "text 4"
L random key: "text 5"
L random key: "text 6"
Так что на данный момент, каждый раз, когда я нажимаю на кнопку ... он продолжает вызова «текст 1» Я хочу, чтобы позвонить текст 1 и 2 поочередно и случайным образом ...
Может ли кто-нибудь мне помочь?
Большое спасибо за помощь. Я добавляю больше детей к ребенку «постов», но безрезультатно ... Я все еще получаю только значение первого ребенка. Выполняю ли я это правильно? 'long allNum = dataSnapshot.getChildrenCount(); int maxNum = (int) allNum; int minNum = 1; int randomNum = new Random(). NextInt (maxNum - minNum + 1) + minNum; int count = 0' большое спасибо! – Jagmaster
Извините ... попробовал после форматирования комментариев, но все еще не могу получить формат кода ... – Jagmaster
Я не понимаю эту строку Iterator ids = ds.iterator(); Сколько элементов имеет итератор? –