![](/img/trans.png)
[英]Event Listener in Firestore doesn’t see field updates in documents inside collection. Android, Java
[英]After getting all documents in collection can't add field to ArrayList, Android Studio, Java, Firebase Firestore
大家好,我遇到了一個問題,因為我從 Firebase Firestore 獲取整個集合,並希望在每個文檔中獲取字段“主題名稱”並將其添加到 ArrayList 中,然后在 ListView 中顯示此主題。 這將成為我申請的論壇部分的一部分。
但!
似乎它獲取了文檔,並像我在日志中看到的那樣讀取了它們的字段
Log.d(TAG, document.getId() + " => " + document.get("topic_name"));
_
D/TAG: 6EvC4SqqDxR4TYelLOKM => Topic 1
KpXLBDzSkAb2u96knG8L => Topic 4
SY49j4RqcOI1v79EIVME => Topic 3
xS0Hw4Rj5KPGj1G7vy7T => Topic 2
它不會將它添加到 ArrayList 或者它以某種方式消失了,因為設備不顯示列表。
起初,我認為這是因為從內部類中訪問 ArrayList 時需要將其聲明為 final,但事實並非如此,因為我添加了一個測試主題來檢查該假設。 (Test Topic 123-Test to Topic 125) 並且它正常顯示它們,因此 ArrayList 不是最終的情況。
我嘗試將負責 ListView 的整個代碼放在 onComplete 方法中,但它似乎不起作用,因為 Adapter 充滿了錯誤,如果可能的話,我希望得到一些幫助,或者關於如何做到這一點的替代想法。 如果我復制了該主題,我很抱歉我試圖尋找答案但無法找到它。
代碼如下:
public class Forum extends Activity {
public static final String TAG = "TAG";
FirebaseFirestore db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_forum);
db = FirebaseFirestore.getInstance();
final ArrayList<String> forumTopics = new ArrayList<>();
db.collection("forum_topics")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
int count = 0;
for (QueryDocumentSnapshot document : task.getResult()) {
forumTopics.add(count, document.getString("topic_name"));
count += 1;
Log.d(TAG, document.getId() + " => " + document.get("topic_name"));
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
String test_string = "Test Topic 123";
forumTopics.add(0,test_string);
forumTopics.add(1,"Test Topic 124");
forumTopics.add(2,"Test Topic 125");
forumTopics.add(3,"Test Topic 126");
ListAdapter forumAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, forumTopics);
ListView forumListView = findViewById(R.id.ForumListView);
forumListView.setAdapter(forumAdapter);
forumListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String topic = String.valueOf(parent.getItemAtPosition(position));
Toast.makeText(Forum.this, topic, Toast.LENGTH_LONG).show();
}
}
);
}
非常感謝。
試試這個
db.collection("forum_topics")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
int count = 0;
for (QueryDocumentSnapshot document : task.getResult()) {
forumTopics.add(count, document.getString("topic_name"));
count += 1;
forumTopics.add(document.get("topic_name"));
}
forumAdapter.notifyDataSetChanged()
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
ListAdapter forumAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, forumTopics);
ListView forumListView = findViewById(R.id.ForumListView);
forumListView.setAdapter(forumAdapter);
我能夠在您的幫助下解決問題,下面是適用於我的案例的解決方案。 謝謝所有幫助過我的人,我非常感激,祝你有美好的一天。
db = FirebaseFirestore.getInstance();
final ArrayList<String> forumTopics = new ArrayList<>();
final ListAdapter forumAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, forumTopics);
ListView forumListView = findViewById(R.id.ForumListView);
forumListView.setAdapter(forumAdapter);
db.collection("forum_topics")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
int count = 0;
for (QueryDocumentSnapshot document : task.getResult()) {
forumTopics.add(count, document.getString("topic_name"));
count += 1;
}
((ArrayAdapter) forumAdapter).notifyDataSetChanged();
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
forumListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String topic = String.valueOf(parent.getItemAtPosition(position));
Toast.makeText(Forum.this, topic, Toast.LENGTH_LONG).show();
}
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.