Ошибка при отображении в FirebaseRecyclerAdapter из базы данных Firebase - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь показать данные из моей базы данных 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: найдено два получателя или поля с конфликтующей чувствительностью к регистру для свойства: alamat

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

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Необходимо убедиться, что имена свойств 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;
}
0 голосов
/ 02 мая 2018

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

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

public String alamat;

public String getAlamat() {
    return alamat;
}

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