【问题标题】:How to fetch and store all document id from firestore database to array adapter如何从firestore数据库中获取所有文档ID并将其存储到数组适配器
【发布时间】:2025-12-17 23:25:01
【问题描述】:

我实际上是在尝试将所有文​​档 ID 从 firestore 数据库获取到数组适配器中,因为我正在使用 document.getid() 但不是将所有文档 ID 一起获取,而是一个接一个地获取它们但是我真正想要的所有的 id 都应该显示在一个列表中我该如何解决这个问题任何帮助将不胜感激。 看看我正在尝试实现的代码。

public void onClick(View v) {
                if (position==0) {
                    db.collection("Listening")
                            .get()
                            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                    if (task.isSuccessful()) {
                                        for (QueryDocumentSnapshot document : task.getResult()) {
                                            if (document != null) {
                                                AlertDialog.Builder builderSingle = new AlertDialog.Builder(mContext);

                                                builderSingle.setTitle("Select A Test");

                                                final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(mContext, android.R.layout.select_dialog_singlechoice);

                                                //  for (int i=0;i<document.getId().;i++) {

                                           //  }
                                                builderSingle.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                                                    @Override
                                                    public void onClick(DialogInterface dialog, int which) {
                                                        dialog.dismiss();
                                                    }
                                                });

                                                builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
                                                    @Override
                                                    public void onClick(DialogInterface dialog, int which) {
                                                        String strName = arrayAdapter.getItem(which);
                                                        Intent intent=new Intent(mContext,Listening.class);
                                                        intent.putExtra("tname",strName);
                                                        mContext.startActivity(intent);
                                                    }
                                                });
                                                builderSingle.show();
                                            } else {
                                                Log.d("LOGGER", "No such document");
                                            }
                                        }
                                    } else {
                                        Log.w(TAG, "Error getting documents.", task.getException());
                                    }
                                }
                            });
                    }
            }
        });

这是我的数据库的截图:

【问题讨论】:

  • 我看到文档是空的。为了显示数据,您的文档应该包含一些数据。如果您有兴趣,推荐使用 this 方法,您可以通过该方法从 Cloud Firestore 数据库中检索数据并使用 FirestoreRecyclerAdapter 将其显示在 RecyclerView 中。
  • @AlexMamo 我知道如何显示文档中的数据,但我想要的是集合中的所有文档都应该被提取到数组适配器中
  • 你没有任何可以显示的数据(根据你的截图)。
  • @AlexMamo 你还是没有得到它我不想获取数据我想获取所有文档名称

标签: java android firebase google-cloud-firestore android-arrayadapter


【解决方案1】:

根据您的评论:

我想获取所有文档名称

请使用以下代码获取所有文档 ID。

db.collection("Listening").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        List<String> ids = new ArrayList<>();
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                String id = document.getId();
                ids.add(id);
            }
        }
        ListView listView = (ListView) findViewById(R.id.list_view);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(mContext, android.R.layout.select_dialog_singlechoice, ids);
        listView.setAdapter(arrayAdapter);
    }
});

结果将是一个包含三个字符串的列表:

Test 1
Test 2
Test 3

请注意,我在循环之外创建了适配器,并且我使用了带有三个参数的 ArrayAdapter 构造函数。

【讨论】:

    最近更新 更多