У меня есть класс адаптера RecylerView, который предназначен для пользователей сообщений. То, что я пытаюсь сделать, это получить информацию почтовые авторы через Firebase, а затем связать эту информацию в должность в onBindViewHolder()
Получение данных Firebase в recyclerview
Моя проблема заключается в том, что, когда я называю getPostAuthorInfo()
(который используется только для получения данных из firebase) в onBindViewHolder()
метод является асинхронным, так что я не в состоянии связать свойства, потому что данные (Muser) еще не готов:
Picasso.with(mContext).load(mUser.getProfilePictureImageUrl()).into(viewHolder.authorsProfilePicture);
Может кто-то помочь мне понять, если я подхожу это неправильный путь, или просто не делать это правильно?
Thank you.
private void getPostAuthorInfo(final String userId) {
mFirebaseDatabase.child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
String firstName = "";
String lastName = "";
String dateAccountCreated = "";
String email = "";
String userId = "";
String username = "";
Boolean isMale = false;
Boolean isFemale = false;
Boolean isOther = false;
String biography = "";
String location = "";
String profilePictureImageUrl = "";
String profilePictureImageName = "";
String profilePictureCaptionName = "";
HashMap <String, String> profileInformation = new HashMap<>();
for (DataSnapshot child : snapshot.getChildren()) {
firstName = (String) snapshot.child("firstName").getValue();
lastName = (String) snapshot.child("lastName").getValue();
dateAccountCreated = (String) snapshot.child("dateAccountCreated").getValue();
email = (String) snapshot.child("email").getValue();
userId = (String) snapshot.child("userId").getValue();
username = (String) snapshot.child("username").getValue();
isMale = (Boolean) snapshot.child("male").getValue();
isFemale = (Boolean) snapshot.child("female").getValue();
isOther = (Boolean) snapshot.child("other").getValue();
biography = (String) snapshot.child("biography").getValue();
location = (String) snapshot.child("location").getValue();
profilePictureImageUrl = (String) snapshot.child("profilePictureImageUrl").getValue();
profilePictureImageName = (String) snapshot.child("profilePictureImageName").getValue();
profilePictureCaptionName = (String) snapshot.child("profilePictureCaptionName").getValue();
profileInformation = (HashMap) snapshot.child("profileInformation").getValue();
}
mUser = new User(userId, firstName, lastName, username, email, isMale,
isFemale, isOther, dateAccountCreated, biography, location,
profilePictureImageUrl, profilePictureImageName, profilePictureCaptionName, profileInformation);
Log.i(TAG, "Currently signed in user: " + mUser.toString());
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e(TAG, "Failed to retrieve signed in user", error.toException());
}
});
}
человек опубликовал весь код, вы только что разместили ненужный материал Пикассо –
Считаете ли вы использование библиотеки FirebaseUI? –
@ cricket_007 Да. Я просто слишком далеко использую обычные адаптеры для переключения сейчас. – Fernando