Я назначаю два запроса Firestore для объектов LiveData.Каждый из этих запросов возвращается к различным классам объектов: User и Book.Мне нужно объединить их вместе и применить преобразование, чтобы я мог создать LinkedHashmap, который объединяет оба набора данных (запросы).Для этого я использую данные MediatorLive и для возможности слияния двух разных классов я использую QuerySnapshot в качестве типа возвращаемого значения.
Проблема, с которой я сталкиваюсь, заключается в том, что я вывожу результатыобъекта MediatorLiveData я получаю результаты дважды и составлен.Кроме того, результаты первого раза возвращают ноль для класса Book, а результаты второго раза возвращают ноль для класса User.
Что мне не хватает?
Вот мой упрощенный код:
Это мои запросы Firestore и назначения LiveData:
//getUsers query using FirebaseQueryLiveData class
private Query getUsersQuery() {
FirebaseAuth mAuth = FirebaseAuth.getInstance();
adminID = mAuth.getUid();
query = FirebaseFirestore.getInstance().collection("admins")
.document(adminID)
.collection("users")
return query;
}
private FirebaseQueryLiveData usersLiveData = new FirebaseQueryLiveData(getUsersQuery());
//getBooks query using FirebaseQueryLiveData class
private Query getBooksQuery () {
FirebaseGroupID firebaseGroupID = new FirebaseGroupID(getApplication());
groupID = firebaseGroupID.getGroupID();
query = FirebaseFirestore.getInstance().collection("books")
.whereEqualTo("groupID", groupID)
return query;
}
private FirebaseQueryLiveData booksLiveData = new FirebaseQueryLiveData(getBooksQuery());
Ниже приведены мои MediatorLiveData и связанный метод get:
//MediatorLiveData merge two LiveData QuerySnapshot streams
private MediatorLiveData<QuerySnapshot> usersBooksLiveDataMerger() {
final MediatorLiveData<QuerySnapshot> mediatorLiveData = new MediatorLiveData<>();
mediatorLiveData.addSource(usersLiveData, new Observer<QuerySnapshot>() {
@Override
public void onChanged(@Nullable QuerySnapshot querySnapshot) {
mediatorLiveData.setValue(querySnapshot);
}
});
mediatorLiveData.addSource(booksLiveData, new Observer<QuerySnapshot>() {
@Override
public void onChanged(@Nullable QuerySnapshot querySnapshot) {
mediatorLiveData.setValue(querySnapshot);
}
});
return mediatorLiveData;
}
//get method to get our merged LiveData streams
public MediatorLiveData<QuerySnapshot> getUsersBooksLiveDataMerger() {
return usersBooksLiveDataMerger();
}
А в MainActivity вот мой наблюдатель:
//Main Activity observer
mainViewModel.getUsersBooksLiveDataMerger().observe(this, new Observer<QuerySnapshot>() {
@Override
public void onChanged(@Nullable QuerySnapshot querySnapshot) {
if (querySnapshot != null) {
List<Book> books;
List<User> users;
books = querySnapshot.toObjects(Book.class);
users = querySnapshot.toObjects(User.class);
Log.d(TAG, "OBSERVE MERGE users: " + users);
Log.d(TAG, "OBSERVE MERGE books: " + books);
}
}
});
Наконец, вот мой вывод полученного слияния:
MainActivity: НАБЛЮДАЙТЕ пользователей MERGE: [User {userID = 'OtlmIQxeLkvNYExsxjg4', userName = 'Lisa', lastDisplayedBookID = 'none', isAllBooks = false, dateCreated = ср. 23 мая 11:27:20 PDT 2018, dateModified = ср. 23 мая 11:27:20 PDT 2018, allBookID =' akuGpq7aMB85J9QMtsBi ', groupID =' S0Ql3hnHmXACUqeGW04n '}] * 10 21 * ** MainActivity: НАБЛЮДАЙТЕ MERGE books: [Book {bookAssigned = false, bookName = 'null', bookType = 'null', assignTo = 'null', bookID = 'null', groupID = 'S0Ql3hnHmXACUqeGW04n', userID = 'Otlmjxxs,' 'ulxvxxldateCreated = ср 23 мая 11: 27:20 PDT 2018, lastAssignedDate = null, bookNum = 0}]
MainActivity: НАБЛЮДАЙТЕ MERGE:false, dateCreated = null, dateModified = null, allBookID = 'null', groupID = 'S0Ql3hnHmXACUqeGW04n'}, пользователь {userID = 'OtlmIQxeLkvNYExsxjg4', userName = 'null', lastDisplayedBooks = ложный_принцип23 мая 11:27:20 PDT 2018, dateModified = null, allBookID = 'null', groupID = 'S0Ql3hnHmXACUqeGW04n'}]
MainActivity: НАБЛЮДАЙТЕ MERGE books: [Book {bookAssigned = false, bookName = 'AllКниги ', bookType =' NA ', assignTo =' Lisa ', bookID =' akuGpq7aMB85J9QMtsBi ', groupID =' S0Ql3hnHmXACUqeGW04n ', userID =' OtlmIQxeLkvNYExsxjg4 ', dateDumed_0 = 0Ned = bookyll = bookylled_eded = bookyll = bookylled_ligned_ligned_ligned_ligned_ligned_ligned_lignedtrue, bookName = 'Голодные игры', bookType = 'Мягкая обложка', назначеноTo = 'Лиза', bookID = '2D9C293DCB4469904532FF3FD81B3E7B', groupID = 'S0Ql3hnHmXACUqeGW04n', userID = 'OtlmIQYexed0PDT 2018, lastAssignedDate = ср. 23 мая 11:27:20 PDT 2018, bookNum = 1}]
Как видно, результаты выглядят сложными, но с нулевыми значениями.
Любая помощь по этому вопросу будет принята с благодарностью!