在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
相关产品推荐
相关产品推荐

