Как заполнить адаптер списка, получив данные firebase?

Я пытаюсь запросить базу данных firebase для хранения дочерних значений в держателе внутри адаптера списка. Где хранить значения снимков данных, чтобы использовать их для инициализации держателей?

Запрос на получение данных из firebase не работает.

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference
            .child(mContext.getString(R.string.dbname_user_account_settings))
            .orderByChild(mContext.getString(R.string.field_user_id))
            .equalTo(getItem(position).getUser_id());
    Log.d(TAG, "getting the data");
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "onDataChange: getting the data 2");
            for ( DataSnapshot singleSnapshot :  dataSnapshot.getChildren()){
                Log.d(TAG, "onDataChange: getting the data 3");

                holder.username.setText(
                      singleSnapshot.getValue(UserAccountSettings.class).getUsername());


                ImageLoader imageLoader = ImageLoader.getInstance();

                imageLoader.displayImage(
                        singleSnapshot.getValue(UserAccountSettings.class).getProfile_photo(),
                        holder.profileImage);
            }

        }

UserAccountSettings.class:

public class UserAccountSettings implements Parcelable{

private String description;
private String display_name;
private String profile_photo;
private String username;
private String website;

public UserAccountSettings(String description, String display_name, String profile_photo, String username,
                           String website) {
    this.description = description;
    this.display_name = display_name;
    this.profile_photo = profile_photo;
    this.username = username;
    this.website = website;
}

public UserAccountSettings() {

}

protected UserAccountSettings(Parcel in) {
    description = in.readString();
    display_name = in.readString();
    profile_photo = in.readString();
    username = in.readString();
    website = in.readString();
}

public static final Creator<UserAccountSettings> CREATOR = new Creator<UserAccountSettings>() {
    @Override
    public UserAccountSettings createFromParcel(Parcel in) {
        return new UserAccountSettings(in);
    }

    @Override
    public UserAccountSettings[] newArray(int size) {
        return new UserAccountSettings[size];
    }
};

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDisplay_name() {
    return display_name;
}

public void setDisplay_name(String display_name) {
    this.display_name = display_name;
}

public String getProfile_photo() {
    return profile_photo;
}

public void setProfile_photo(String profile_photo) {
    this.profile_photo = profile_photo;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getWebsite() {
    return website;
}

public void setWebsite(String website) {
    this.website = website;
}


@Override
public String toString() {
    return "UserAccountSettings{" +
            "description='" + description + '\'' +
            ", display_name='" + display_name + '\'' +
            ", profile_photo='" + profile_photo + '\'' +
            ", username='" + username + '\'' +
            ", website='" + website + '\'' +
            '}';
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(description);
    dest.writeString(display_name);
    dest.writeString(profile_photo);
    dest.writeString(username);
    dest.writeString(website);
} }

Ошибка :- com.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String в тип com.example.ekagra.project.Models.UserAccountSettings

Я ожидаю получить текст в файле holder.username и URL фотографии в изображении Holder.profile, но цикл for, похоже, даже не работает, потому что журнал «получение данных 3» не отображается на мониторе.

Любая помощь будет оценена.

не могли бы вы проверить logcat, есть ли какие-либо журналы, связанные с firebase?

KOTIOS 14.01.2019 06:12

Ага - com.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String в тип com.example.ekagra.project.Models.UserAccountSettings

Ekagra Sinha 14.01.2019 07:57

Вы не конвертируете объект datasnapshot в свой собственный класс. Вы должны получить значение этого объекта с помощью singleSnapshot.getValue()

bradley101 14.01.2019 08:02

Если вы хотите преобразовать снимок в свой собственный класс, возможно, вам придется сделать это вручную.

bradley101 14.01.2019 08:03

Как правильно это сделать?

Ekagra Sinha 14.01.2019 10:18

Пожалуйста, добавьте структуру своей базы данных и, пожалуйста, ответьте @AlexMamo

Alex Mamo 14.01.2019 11:08

@AlexMamo Я исправил это, убрав цикл for.

Ekagra Sinha 14.01.2019 12:00
0
7
62
2

Ответы 2

зарегистрируйте результат, который вы получили от моментального снимка Log.d(TAG, "onDataChange: getting the data 3" + singleSnapshot);

тогда скажи мне, что ты получаешь. Также вы можете добавить изображение своей базы данных для справки

Я получаю - com.google.firebase.database.DatabaseException: не могу преобразовать объект типа java.lang.String в тип com.example.ekagra.project.Models.UserAccountSettings Я обновил UserAccountSettings.class в вопросе

Ekagra Sinha 14.01.2019 07:58

добавьте снимок экрана с ошибкой и где ошибка возникает

Ashwith Saldanha 14.01.2019 08:11

Я исправил это, удалив цикл for.

Другие вопросы по теме