Привет, ребята, у меня проблема, так как я получаю всю коллекцию из Firebase Firestore и хочу получить поле "topi c name" в каждом документе и добавить его в 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 при доступе к нему из внутреннего класса должен быть объявлен окончательным, но это не так, поскольку я добавил тестовые темы, чтобы проверить это предположение. (Test Topi c 123-Test to Topi c 125), и он отображает их нормально, поэтому в случае ArrayList это не так.
Я попытался поместить весь код, отвечающий за ListView, внутри Метод onComplete, но, похоже, он не работает, потому что адаптер переполнен ошибками, я хотел бы получить некоторую помощь, если это возможно, или, возможно, альтернативную идею о том, как это сделать. Если я воспроизвел топи c, извините, я пытался найти ответ, но не смог его найти.
Код ниже:
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();
}
}
);
}
Это вывод на устройстве
Большое спасибо.