Ошибка ссылки на базу данных Firebase: нет такого экземпляра поля: 'mDatabaseReference' - PullRequest
2 голосов
/ 02 мая 2020

Я использую базу данных Firebase Realtime для хранения данных для проекта. Я использую Android Studio и Java для создания мобильного приложения. В этом конкретном упражнении новый пользователь заполняет форму, чтобы подписаться на услугу. Как только они вводят свою информацию и нажимают кнопку «Отправить», она обрабатывает эту информацию и вставляет ее в базу данных.

Вот соответствующий код для этого класса:

public class CreateUserActivity extends AppCompatActivity {
private DatabaseReference mDatabaseReference;

private List<String> mInterestList;

private EditText mUsername;
private EditText mPassword;
private EditText mEmail;
private EditText mLocation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_user);

    mDatabaseReference = FirebaseDatabase.getInstance().getReference();

    mInterestList = new ArrayList<>();

    mUsername = findViewById(R.id.text_username);
    mPassword = findViewById(R.id.text_password);
    mEmail = findViewById(R.id.text_email);
    mLocation = findViewById(R.id.text_location);
}

public void onCheckboxClicked(View view) {
    CheckBox checkbox = (CheckBox) view;
    boolean isChecked = checkbox.isChecked();
    String interest = checkbox.getText().toString();

    if(isChecked) {
        mInterestList.add(interest);
    }else {
        mInterestList.remove(interest);
    }
}

public void onSaveUser(View view) {
    String username = mUsername.getText().toString();
    String password = mPassword.getText().toString();
    String email = mEmail.getText().toString();
    String location = mLocation.getText().toString();

    if(TextUtils.isEmpty(username) ||
        TextUtils.isEmpty(password) ||
        TextUtils.isEmpty(email) ||
        TextUtils.isEmpty(location) ||
        mInterestList.size() == 0) {
        displayToast("Please enter values for all fields");
    }else {
        List<String> interests = mInterestList;
        User user = new User(username, password, email, location, interests, null);

        mDatabaseReference.child("users").child(username).setValue(user, new DatabaseReference.CompletionListener() {
            @Override
            public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
                if(databaseError != null) {
                    Log.e(GetTogetherApp.LOG_TAG, databaseError.getMessage());
                }else{
                    displayToast("User created!");
                }
            }
        });
    }
}

Когда я пробежал точки останова, в этой строке, похоже, возникла ошибка:

mDatabaseReference.child("users").child(username).setValue()

Специально как только я пытаюсь войти в метод setValue (). Два других вызова child () работают, чтобы найти путь, как предполагалось. У меня есть ссылка на базу данных в качестве переменной-члена, поэтому я не уверен, почему она теряет ее в этот момент.

Вот посмотрите на мою структуру базы данных

Firebase Структура базы данных Pi c

Ошибка в Android Studio:

1 Ответ

2 голосов
/ 02 мая 2020

Сообщение об ошибке на вашем скриншоте находится в инспекторе переменных в отладчике Android Studio. Это означает, что там, где происходит ошибка, нет переменной mDatabaseReference, поэтому отладчик не может показать ее значение. Это не настоящая причина cra sh, просто отладчик говорит вам, что он не может показать вам то, о чем вы просили.

Вы можете найти истинную причину проблемы, проверив InvocationTargetException e.

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