Я использую базу данных 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: