Ошибка при отображении в FirebaseRecyclerAdapter из базы данных firebase

Я пытаюсь показать данные из моей базы данных Firebase в RecylerView, и я следую этому руководству http://www.programmingviral.com/firebase-recyclerview-tutorial/

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.biodatalist_layout);
        ButterKnife.bind(this);

        recyclerView = findViewById(R.id.rec);

        LinearLayoutManager horizontalLayoutManagaer=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(horizontalLayoutManagaer);

        mdatabase = FirebaseDatabase.getInstance().getReference().child("Biodata");
        mdatabase.keepSynced(true);

        FirebaseRecyclerAdapter<BiodataModel, BiodataAdapter> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<BiodataModel, BiodataAdapter>(
                        BiodataModel.class,
                        R.layout.biodata_list_row,
                        BiodataAdapter.class,
                        mdatabase
                )
                {
                    @Override
                    protected void populateViewHolder(final BiodataAdapter viewHolder,final BiodataModel model,
                                                      int position) {
                        viewHolder.setEmailtext(model.getEmail());
                        viewHolder.setFullnametext(model.getFullname());

                    }

                };

        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }

и мой BiodataModel

public class BiodataModel {

    public String Fullname,Email,NoTelp,Alamat;

    public BiodataModel() {

    }

    public String getFullname() {
        return Fullname;
    }

    public String getEmail() {
        return Email;
    }

    public String getNoTelp() {
        return NoTelp;
    }

    public String getAlamat() {
        return Alamat;
    }

    public void setFullname(String Fullname) {
        this.Fullname = Fullname;
    }

    public void setEmail(String Email) {
        this.Email = Email;
    }

    public void setNoTelp(String NoTelp) {
        this.NoTelp = NoTelp;
    }

    public void setAlamat(String Alamat) {
        this.Alamat = Alamat;
    }
}

когда я запускаю это действие. Я получаю эту ошибку

com.google.firebase.database.DatabaseException: Found two getters or fields with conflicting case sensitivity for property: alamat

моя структура

Ошибка при отображении в FirebaseRecyclerAdapter из базы данных firebase

Как я могу это решить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
245
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашей базе данных есть свойство: alamat в нижнем регистре. Но в классе модели у вас есть поле Alamat с прописными буквами, оба должны быть одинаковыми.

Измените поле в классе модели:

public String alamat;

public String getAlamat() {
    return alamat;
}

public void setAlamat(String alamat) {
    this.alamat = alamat;
}

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

YVS1102 02.05.2018 12:56

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

Peter Haddad 02.05.2018 13:26

Хм, откуда ты знаешь, что у меня строчный alamat?

YVS1102 02.05.2018 15:05

Я новичок в этом. Простите

YVS1102 02.05.2018 15:05

вы этого не сделаете, но вам нужно следовать соглашению javabean и иметь поля в нижнем регистре. так что, как firstName, alamat, чтобы избежать этой ошибки .. также проверьте это здесь: stackoverflow.com/questions/37801036/…

Peter Haddad 02.05.2018 15:10

пожалуйста, проголосуйте за ответ, так как он вам помог, спасибо!

Peter Haddad 03.05.2018 07:33

я получаю это предупреждение No setter/field for NoTelp found on class id.co.id.co.aaaa.BiodataModel (fields/setters are case sensitive!)

YVS1102 03.05.2018 08:38

Позвольте нам продолжить обсуждение в чате.

Peter Haddad 03.05.2018 08:39

Вам необходимо убедиться, что имена свойств JSON в базе данных и вашего класса Java точно совпадают. Прямо сейчас ваш класс BiodataModel имеет свойство (JavaBean) alamat, а база данных содержит свойство (JSON) Alamat. Поскольку регистр первого символа отличается, Firebase не может найти подходящее свойство для вашего объекта при чтении данных из базы данных.

Как показал Питер, самое простое решение - сохранить один и тот же случай между базой данных и кодом. Альтернативой является аннотирование вашего Java-кода с правильным написанием / регистром свойства JSON:

public class BiodataModel {

    public String Fullname,Email,NoTelp,Alamat;

    public BiodataModel() {

    }

    @PropertyName("Fullname")
    public String getFullname() {
        return Fullname;
    }

    @PropertyName("Email")
    public String getEmail() {
        return Email;
    }

    @PropertyName("NoTelp")
    public String getNoTelp() {
        return NoTelp;
    }

    @PropertyName("Alamat")
    public String getAlamat() {
        return Alamat;
    }

    @PropertyName("Fullname")
    public void setFullname(String Fullname) {
        this.Fullname = Fullname;
    }

    @PropertyName("Email")
    public void setEmail(String Email) {
        this.Email = Email;
    }

    @PropertyName("NoTelp")
    public void setNoTelp(String NoTelp) {
        this.NoTelp = NoTelp;
    }

    @PropertyName("Alamat")
    public void setAlamat(String Alamat) {
        this.Alamat = Alamat;
    }
}

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

public class BiodataModel {
    public String Fullname;
    public String Email;
    public String NoTelp;
    public String Alamat;
}

Поскольку имена полей здесь уже точно соответствуют именам свойств JSON, аннотировать их не нужно. Но если у вас когда-нибудь возникнет несоответствие, вы можете просто аннотировать поле, чтобы все снова заработало. Например:

public class BiodataModel {
    @PropertyName("FullName")
    public String Fullname;
    public String Email;
    public String NoTelp;
    public String Alamat;
}

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