Моя цель - запросить коллекцию и получить документы, в каждом документе есть три или пять хэш-карт. Моя цель - получить документы с разными идентификаторами и заполнить их во вложенном представлении ресайклера. Но у меня возникли проблемы с преобразованием значений карты в arraylist
Мой класс основной модели:
publi c class BattleGroupPosts {
private String userId;
public ArrayList<PostBattle> userPost;
public BattleGroupPosts() {
} ///below there getters and setters and constructions are there
My PostBattle Modelclass:
public class PostBattle {
private String id;
private String imageuri;
private String description;
private String publisher;
private String tags;
private String challenge_tittle;
private int NumberOfLikesPoints;
private int battle_post_count;
private long TimeLimit;
private Boolean post_time_done;
private @ServerTimestamp
Date timestamp;
public PostBattle() {
} //below the getter and setter and constructor
Запрос из firestore:
private List<BattleGroupPosts> battleGroupPosts;
private ArrayList<PostBattle> battlePostLists;
private void GettingAllBattleGroupPosts(){
battleGroupPosts = new ArrayList<>();
battlePostLists = new ArrayList<>();
adapter = new BattlGroupAdapter(mContext,battleGroupPosts);//Setting the adapter
battle_posts.setAdapter(adapter);
CollectionReference GroupIdRef = mFirestore
.collection("OpenBattle")
.document(BattlesPost_creator)
.collection("BattlePost")
.document(BattlePost_id)
.collection("Participants");
GroupIdRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
final BattleGroupPosts groupPosts = document.toObject(BattleGroupPosts.class);
groupPosts.setUserId(groupPosts.getUserId());
groupPosts.setUserPosts(battlePostLists);
Map<String, PostBattle> batPost = (Map<String, PostBattle>) document.get("userPost1");
Я застрял здесь, я не знаю, как добавить их в список массивов в классе модели Я попытался преобразовать hashMap в массив, но мои изображения заполняется всеми идентификаторами элементов в recylerview, как и в случае l oop, я думаю. мой метод попробуйте:
List<PostBattle> newList = new ArrayList<PostBattle>(batPost.values());
Log.d(TAG, "onComplete: liisd:" + newList.get(0));
PostBattle postBattle = new PostBattle();
postBattle.setImageuri(String.valueOf(newList.get(1)));
postBattle.setNumberOfLikesPoints(Integer.valueOf(String.valueOf(newList.get(2))));
battlePostLists.add(postBattle);
battleGroupPosts.add(groupPosts);
adapter.notifyDataSetChanged(); ///These methods i did it inside for the loop
Пробовали это:
PostBattle postBattle = new PostBattle();
Object value = batPost.get("imageuri");
postBattle.setImageuri(String.valueOf(value));
Log.d(TAG, "onComplete: value: " + value);
battlePostLists.add(postBattle);
groupPosts.setUserPosts(battlePostLists);
battleGroupPosts.add(groupPosts);
adapter.notifyDataSetChanged();
И это тоже:
Map<String, Object> idMaps = document.getData();
for (Map.Entry<String, Object> id : idMaps.entrySet()){
String userId = id.getKey();
Object yourObject = id.getValue();
Log.d(TAG, "onComplete: IDSSS: " + userId);
Log.d(TAG, "onComplete: Object: " + yourObject);
Map<String, PostBattle> batPost = (Map<String, PostBattle>) document.get("userPost1");
PostBattle postBattle = new PostBattle();
Object value = batPost.get("imageuri");
postBattle.setImageuri(String.valueOf(value));
batPost.clear();
battlePostLists.add(postBattle);
введите описание изображения здесь