gpt4 book ai didi

java - 获取文档 Cloud Firestore 中集合的所有文档

转载 作者:行者123 更新时间:2023-12-02 03:32:47 27 4
gpt4 key购买 nike

我有一个人员列表(piloto),每个人都有一个包含一些音频的集合。我将此音频放在一个列表中,该列表发送适配器并在回收器 View 中显示它。

我尝试了不同的代码,只有这个对我有用,但问题就在这里:

为什么我第一次单击某个项目时它显示音频列表为空?然后返回,下次我单击该项目时,它会正确显示列表。当我用真正的智能手机运行应用程序时,会发生这种情况,当我第一次用模拟器运行它时,它会正确显示列表。

public class PilotoDetalle extends AppCompatActivity {

RecyclerView rv;

List<Audio> audios;

AdapterAudios adapter;

private Audio audio;

private Piloto piloto;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_piloto_detalle);

rv = findViewById(R.id.recyclerAudio);
rv.setLayoutManager(new LinearLayoutManager(this));

audios = new ArrayList<>();
adapter = new AdapterAudios(audios);
rv.setAdapter(adapter);

final FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("pilotos").document(piloto.getId()).collection("audios")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot snapshots,
@Nullable FirebaseFirestoreException e) {

if (e != null) {
Log.w("TAG", "listen:error", e);
return;
}

for (DocumentChange dc : snapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
Log.d("TAG", "New Msg: " + dc.getDocument().toObject(Message.class));
//audios.removeAll(audios);
Audio audio = dc.getDocument().toObject(Audio.class);
audios.add(audio);
break;
case MODIFIED:
Log.d("TAG", "Modified Msg: " + dc.getDocument().toObject(Message.class));
break;
case REMOVED:
Log.d("TAG", "Removed Msg: " + dc.getDocument().toObject(Message.class));
break;
}
}
}
});
}

最佳答案

发生这种情况是因为第一次设置适配器时列表为空。

audios = new ArrayList<>();
adapter = new AdapterAudios(audios);
rv.setAdapter(adapter);

您应该在 EventListener 中填充您的 audio 并在那里设置/交换适配器,以便在刷新时获取数据。

关于java - 获取文档 Cloud Firestore 中集合的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56875490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com