You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio中用Java实现从Firestore随机获取单份文档

实现方案

你可以直接在对应Activity的生命周期回调中添加Firestore查询+随机取值逻辑即可,以下是完整可运行的Java代码:

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RandomNameActivity extends AppCompatActivity {
    // 初始化Firestore实例、文本控件、存储名称的列表
    private FirebaseFirestore db;
    private TextView showNameTv;
    private final List<String> peopleNameList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 替换为你自己的布局文件ID
        setContentView(R.layout.activity_random_name);

        // 绑定控件和Firestore实例
        db = FirebaseFirestore.getInstance();
        // 替换为你自己布局里TextView的ID
        showNameTv = findViewById(R.id.tv_show_name);

        // 查询people集合的所有文档
        db.collection("people")
                .get()
                .addOnCompleteListener(task -> {
                    if (task.isSuccessful() && task.getResult() != null) {
                        peopleNameList.clear();
                        // 遍历所有文档,把文档ID存入列表
                        for (QueryDocumentSnapshot doc : task.getResult()) {
                            peopleNameList.add(doc.getId());
                        }
                        // 随机取值设置到TextView
                        if (!peopleNameList.isEmpty()) {
                            int randomIndex = new Random().nextInt(peopleNameList.size());
                            showNameTv.setText(peopleNameList.get(randomIndex));
                        } else {
                            showNameTv.setText("暂无可用数据");
                        }
                    } else {
                        showNameTv.setText("数据加载失败");
                    }
                });
    }
}

如果你要展示的名称不是文档ID,而是存储在文档内的某个字段(比如字段名是username),只需要把peopleNameList.add(doc.getId());替换为peopleNameList.add(doc.getString("username"));即可。

补充说明

  • 如果你希望每次Activity回到前台都重新随机生成名称,而不是仅在Activity首次创建时随机,把上面的查询逻辑移到onResume生命周期方法中即可
  • 该方案适合文档量不大的场景(你当前只有4份文档完全适用),如果后续文档量增长到数百份以上,可以给每个文档预存随机数字段,用范围查询替代全量拉取,性能更高
  • 使用前请确认你的Firestore安全规则已经放开了people集合的读权限,否则会出现加载失败的问题

内容的提问来源于stack exchange,提问作者Subhraneel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:06:03