Как получить массив из Firestore? - PullRequest
1 голос
/ 26 сентября 2019

Я использую структуру данных массива, чтобы сохранить некоторую информацию, как показано

Database structure

UserInfo.java

public class UserInfo {
private String userId, age, height;
public UserInfo(String userId, String age, String height) {
    this.userId = userId;
    this.age = age;
    this.height = height;
}
public String getUserId() {
    return userId;
}
public String getAge() {
    return age;
}
public String getHeight() {
    return height;
  }
}

Как можноЯ получаю array1 и array2 и сохранить их как объект UserInfo?Потому что я хочу заполнить массивы в Recyclerview.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Сначала вам нужно получить содержимое документа.

Как только вы успешно получите DocumentSnapshot, получите из него Java-объект и конвертируйте объект в Json с помощью Gson.

Затем вы можете проанализировать Jsonи создайте список пользователей. Теперь вы можете заполнять списки в программе повторного просмотра.

FirebaseFirestore db;
List<UserInfo> userList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_name);
    db = FirebaseFirestore.getInstance();

    userList = new ArrayList<>();
    DocumentReference docRef = db.collection("users").document("h3cj5y....");// you can use your own here
    docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {

            Object object = documentSnapshot.getData();
            String json = new Gson().toJson(object);
            Log.v("json",json);
            try {
                JSONObject infoObj=new JSONObject(json).getJSONObject("info");
                Iterator<String> iterator = infoObj.keys();
                while (iterator.hasNext()) {
                    String key = iterator.next();
                    JSONObject objArray=infoObj.getJSONObject(key);
                    UserInfo user=new UserInfo();
                    user.setAge(objArray.getString("age"));
                    user.setHeight(objArray.getString("height"));
                    user.setUserId(objArray.getString("userId"));
                    userList.add(user);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });
}

UserInfo.java

public class UserInfo {

private String age;
private String height;
private String userId;

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}

public String getHeight() {
    return height;
}

public void setHeight(String height) {
    this.height = height;
}

public String getUserId() {
    return userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}
}
0 голосов
/ 26 сентября 2019

Вы можете запросить документ из коллекции users и затем получить массив info.Для каждой записи в массиве сопоставьте ее с UserInfo объектом.Затем вставьте каждый UserInfo объект в новую коллекцию UserInfo.Теперь вы готовы запросить UserInfo коллекцию и отобразить результаты в представлении Recycler.

Вот как выполнить запрос из Cloud Firestore: https://firebase.google.com/docs/firestore/query-data/queries#simple_queries

Справочник по добавлению данных в UserInfoколлекция: https://firebase.google.com/docs/firestore/manage-data/add-data

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...