Ошибка при загрузке данных из Firebase в RecyclerView.ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: ... не определяет конструктор без аргументов - PullRequest
0 голосов
/ 26 июня 2018

Я спроектировал действие таким образом, чтобы оно извлекало данные из базы данных Firebase и отображало их в представлении рециркулятора, но при его запуске возникает следующая ошибка

image

мой код

package com.example.android.indiandigitalschool;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;

public class ReceiveNews1 extends AppCompatActivity {
private RecyclerView rv;
private ArrayList<RvClass> list = new ArrayList<>() ;
private DatabaseReference demo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_receive_news1);
    rv = findViewById(R.id.rv);
    rv.setHasFixedSize(true);
    rv.setLayoutManager(new LinearLayoutManager(this));

    demo= FirebaseDatabase.getInstance().getReference().child("IDS").child("News");
    demo.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
            RvClass rvClass = snapshot.getValue(RvClass.class);//error occurs here
              list.add(rvClass);

            }
            CustomAdapter adapter = new CustomAdapter(ReceiveNews1.this,list);
            rv.setAdapter(adapter);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}
}

Мой код модального класса (RvClass) для обработки данных:

package com.example.android.indiandigitalschool;

public class RvClass {
private String title;
private String message;
private String time;

public RvClass(String title, String message, String time) {
    this.title = title;
    this.message = message;
    this.time = time;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}
}

Моя схема Firebase:

image

в чем ошибкаЯ делаю, пожалуйста, помогите мне выяснить ошибку?Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Вы получаете следующую ошибку:

FATAL EXCEPTION: ... does not define a no-argument constructor

Поскольку ваш класс RvClass не определяет no-argument constructor.

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

В Java, когда класс вообще не имеет конструкторов, по умолчанию автоматически добавляется компилятор no-argument constructor.В тот момент, когда вы определяете любой конструктор в классе, конструктор по умолчанию без аргументов исчезает.

В вашем коде ваш класс RvClass определяет такой конструктор, который содержит три аргумента:

public RvClass(String title, String message, String time) {}

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

Чтобы решить эту проблему, либо удалите этот конструктор из класса, либо добавьте вручнуюконструктор без аргументов, как показано ниже:

public RvClass() {}

Когда SDK базы данных Firebase Realtime десериализует объекты, поступающие из базы данных, требуется, чтобы у всех используемых объектов был этот конструктор, чтобы он мог использоватьэто для создания объекта.Поля в объектах устанавливаются с помощью общедоступных методов установки или прямого доступа к общедоступным членам.

Если ваш класс RvClass не имеет общедоступного конструктора без аргументов, SDK действительно не знает, как создатьпример этого.Так что это обязательно.

Также обратите внимание, что сеттеры и геттеры не требуются.Установщики всегда являются необязательными, потому что если для свойства JSON нет установщика, клиент Firebase установит значение непосредственно в поле.Конструктор с аргументами также не требуется.Оба идиоматичны, и есть хорошие случаи, когда занятия проводятся без них.Если вы сделаете поля общедоступными, получатели также будут необязательными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...