gpt4 book ai didi

java - 从 Firebase 数据库获取随机值

转载 作者:行者123 更新时间:2023-11-30 10:33:17 25 4
gpt4 key购买 nike

我已经为我的用户设置了一个将消息输入 Firebase 数据库的 Activity 和另一个随机调用消息的 Activity 。然而,我似乎无法让随机方法继续运行……召回方法只是在点击时一遍又一遍地调用相同的消息。

我正在使用和编辑 username nothingness 在此处发布的方法 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));
}
}
});
}
}

没什么特别的...

在检索 Activity 中,我有一个按钮,它会随机显示(好吧......至少目标是)写入数据库的文本...这是该 Activity 的代码:

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...

谁能帮我解决这个问题?

最佳答案

The Database looks like this:

    posts
L random key: "text 1"
L random key: "text 2"

So at the moment, everytime i click on the button... it keeps on calling "text 1" I want it to call text 1 and 2 alternately and randomly...

您正在使用:

int randomNum = new Random().nextInt(maxNum);

其中 maxNum = 2 因为您的数据库中有 2 个 child 。

作为the documentation表示,此方法调用返回“0 (含) 和指定值(不含) 之间的伪随机、均匀分布的 int 值”。
这意味着您将获得从 0 到 1 的数字。

既然你这样做了:

while(ids.hasNext() && count < randomNum) {

您正在从 0 迭代到 1,这意味着只有 text1 项m。

一般来说,如果你需要生成从minmax(包括两者)的数字,你写

random.nextInt(max - min + 1) + min

关于java - 从 Firebase 数据库获取随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com