如何从 firestore 数据库中获取所有文档 ID 并将其存储到数组适配器
How to fetch and store all document id from firestore database to array adapter
我实际上正在尝试将所有文档 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());
}
}
});
}
}
});
这是我的数据库的截图:
根据您的评论:
i want to fetch all document names
请使用以下代码获取所有文档 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 构造函数。
我实际上正在尝试将所有文档 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());
}
}
});
}
}
});
这是我的数据库的截图:
根据您的评论:
i want to fetch all document names
请使用以下代码获取所有文档 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 构造函数。