如何获取所有将 userId 作为其 phone 号码的用户的姓名并将其存储在列表视图中?
how to get all names of users having userId as their phone number and store it in a listview?
我收集了“用户”,他们的文档作为 phone 编号存储在 Firebase Firestore 中。
当我单击 phone 号码时,它会显示用户详细信息。
现在我想获取所有用户的所有姓名并将姓名列表存储在列表视图中。例如,有 10 个用户,用户 ID 是他们的 phone 号码,他们存储了名称、密码和电子邮件。所以我只想在列表视图中显示 10 个用户名
我不知道如何执行查询。请帮我解决一下这个。以下代码仅显示一个用户的每个值,但我只想要每个用户的名称
public class solo_m1_participants extends Fragment {
private ListView listView;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_solo_m1_participants, container, false);
listView = view.findViewById(R.id.list_view);
db.collection("users")
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
String value = document.getData()+"\n";
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, Collections.singletonList(value));
listView.setAdapter(adapter);
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
});
return view;
}
}
您的代码中的问题在于您正在创建 ArrayAdapter 的新实例 class,在 for 循环的每次迭代中,这意味着您最终将只有一个显示的用户,而不是所有用户。解决这个问题的关键是创建一个带有空列表的适配器,并在回调中用来自数据库的结果填充该列表。获得数据后,只需将更改通知适配器,如我在以下答案中所述:
I have made a small problem otherwise everything is ok
private ListView listView;
private final FirebaseFirestore db = FirebaseFirestore.getInstance();
ArrayList<String> userName = new ArrayList<>();
@SuppressLint("SetTextI18n")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_solo_m1_participants, container, false);
listView = view.findViewById(R.id.list_view);
db.collection("users")
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
userName.clear();
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
userName.add(document.getString("Name"));
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, userName);
listView.setAdapter(adapter);
} else {
userName.clear();
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, userName);
listView.setAdapter(adapter);
}
});
return view;
}
我收集了“用户”,他们的文档作为 phone 编号存储在 Firebase Firestore 中。 当我单击 phone 号码时,它会显示用户详细信息。
现在我想获取所有用户的所有姓名并将姓名列表存储在列表视图中。例如,有 10 个用户,用户 ID 是他们的 phone 号码,他们存储了名称、密码和电子邮件。所以我只想在列表视图中显示 10 个用户名 我不知道如何执行查询。请帮我解决一下这个。以下代码仅显示一个用户的每个值,但我只想要每个用户的名称
public class solo_m1_participants extends Fragment {
private ListView listView;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_solo_m1_participants, container, false);
listView = view.findViewById(R.id.list_view);
db.collection("users")
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
String value = document.getData()+"\n";
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, Collections.singletonList(value));
listView.setAdapter(adapter);
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
});
return view;
}
}
您的代码中的问题在于您正在创建 ArrayAdapter 的新实例 class,在 for 循环的每次迭代中,这意味着您最终将只有一个显示的用户,而不是所有用户。解决这个问题的关键是创建一个带有空列表的适配器,并在回调中用来自数据库的结果填充该列表。获得数据后,只需将更改通知适配器,如我在以下答案中所述:
I have made a small problem otherwise everything is ok
private ListView listView;
private final FirebaseFirestore db = FirebaseFirestore.getInstance();
ArrayList<String> userName = new ArrayList<>();
@SuppressLint("SetTextI18n")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_solo_m1_participants, container, false);
listView = view.findViewById(R.id.list_view);
db.collection("users")
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
userName.clear();
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
userName.add(document.getString("Name"));
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, userName);
listView.setAdapter(adapter);
} else {
userName.clear();
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, userName);
listView.setAdapter(adapter);
}
});
return view;
}