Исключение нулевого указателя Firebase DatabaseReference - PullRequest
0 голосов
/ 16 июня 2020

Я только что создал приложение Hello World с четырьмя EditText и кнопкой. Приложение выдает сбой из-за следующей ошибки: Я получаю исключение с нулевым указателем для события нажатия кнопки.

Класс StudentInformation:

class StudentInformation {
private String name, rollNo, courseName, marks;
StudentInformation(String nameTxt, String rollNoTxt, String courseNameTxt, String marksTxt){
    this.name = nameTxt;
    this.rollNo = rollNoTxt;
    this.courseName = courseNameTxt;
    this.marks = marksTxt;
}

StudentInformation(){
    this.name = "";
    this.rollNo = "";
    this.courseName = "";
    this.marks = "";

}


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getRollNo() {
    return rollNo;
}

public void setRollNo(String rollNo) {
    this.rollNo = rollNo;
}

public String getCourseName() {
    return courseName;
}

public void setCourseName(String courseName) {
    this.courseName = courseName;
}

public String getMarks() {
    return marks;
}

public void setMarks(String marks) {
    this.marks = marks;
}

}

Мой код :

public class MainActivity extends AppCompatActivity {
    FirebaseDatabase mDatabase;
    DatabaseReference mDatabaseReference;
    StudentInformation studentInformation;
    EditText name, rollNo, course, marks;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    Button saveToDatabase = findViewById(R.id.button);

    name = findViewById(R.id.nameText);
    rollNo = findViewById(R.id.rollNoText);
    course = findViewById(R.id.courseNameText);
    marks = findViewById(R.id.marksText);

    mDatabase = FirebaseDatabase.getInstance();
    mDatabaseReference = mDatabase.getReference().child("user");

    saveToDatabase.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            studentInformation = new StudentInformation(name.getText().toString(), rollNo.getText().toString(), course.getText().toString(), marks.getText().toString());
            mDatabaseReference.setValue(studentInformation);


     Toast.makeText(MainActivity.this, "Data saved", Toast.LENGTH_SHORT).show();

//                Intent myIntent = new Intent(MainActivity.this, SecondActivity.class);
//                startActivity(myIntent);
            }
        });

    }
}

Изменить: Как уже указывалось, я использовал неправильный идентификатор. Это исправлено после использования кнопки R.id. вместо R.id.bottom, но теперь я получаю еще одну нулевую ссылку в строке:

mDatabaseReference = mDatabase.getReference().child("user");

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

Кто-нибудь может помочь с этим. Я считаю, что если тег «пользователь» отсутствует в Firebase, не следует ли Firebase создавать его самостоятельно?

Точная ошибка:

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.FirebaseDatabase.getReference()' on a null object reference
    at com.smd.firebasequiz.MainActivity$1.onClick(MainActivity.java:34)

Снимок экрана Firebase: enter image description here

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Попробуйте изменить модификатор доступа объекта DatabaseReference. Сделайте его по умолчанию (просто удалив слово частный ). Кроме того, создайте пустой конструктор по умолчанию для класса StudentInformation .

0 голосов
/ 16 июня 2020

FirebaseDatabase mDatabase; здесь mDatabase равно null, поэтому вам нужно инициализировать его перед вызовом любых методов в классе FirebaseDatabase:

mDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mDatabase.getReference().child("user");
...