Я делаю приложение по бронированию автомобилей, хочу взять данные от пользователя и отобразить их в базе данных. У меня есть вид деятельности рециркулятора в моей основной деятельности, когда пользователь нажимает на элемент, он направляется на подтверждение операции бронирования. Когда я пытаюсь передать переменные данные в базу данных, мое приложение падает. Это все, что я вижу в журнале.
`2020-04-14 14:41:54.075 7903-7939/com.cuboid.rentacabs D/HostConnection: createUnique: call
2020-04-14 14:41:54.077 7903-7939/com.cuboid.rentacabs D/HostConnection: HostConnection::get() New Host Connection established 0xe322c820, tid 7939
2020-04-14 14:41:54.081 7903-7939/com.cuboid.rentacabs D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_3_0
2020-04-14 14:41:54.081 7903-7939/com.cuboid.rentacabs E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1
2020-04-14 14:41:54.187 7903-7939/com.cuboid.rentacabs D/EGL_emulation: eglMakeCurrent: 0xe3205480: ver 3 0 (tinfo 0xe32037d0)
2020-04-14 14:41:54.200 7903-7939/com.cuboid.rentacabs D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 1 2`
мой код подтверждения бронирования:
private static EditText fromDate, toDate, fromTime, toTime;
public int mYear, mMonth, mDay, mHour, mMinute;
private static TextView name;
//public String sName;
public Button fromDateBtn, toDateBtn, fromTimeBtn, toTimeBtn,confirmBtn;
private static RadioGroup modeGroup;
private static RadioButton modeButton;
private DatabaseReference ref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_confirm_booking);
name = findViewById(R.id.car_name);
fromDate = findViewById(R.id.from_date_text);
toDate = findViewById(R.id.to_date_text);
fromTime = findViewById(R.id.from_time_text);
toTime = findViewById(R.id.to_time_text);
fromDateBtn = findViewById(R.id.from_date);
toDateBtn = findViewById(R.id.to_date);
fromTimeBtn = findViewById(R.id.from_time);
toTimeBtn = findViewById(R.id.to_time);
confirmBtn = findViewById(R.id.confirm_booking);
modeGroup = findViewById(R.id.mode_group);
//Button events
onClickEvents();
confirmBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String sName = toDate.getText().toString();
//radio buttons value.
int selectedItemId = modeGroup.getCheckedRadioButtonId();
modeButton = findViewById(selectedItemId);
final String modeSelected = modeButton.getText().toString();
ref = FirebaseDatabase.getInstance().getReference("bookings");
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("date",sName);
ref.setValue(hashMap);
Toast.makeText(confirmBooking.this, "Booking request sent !", Toast.LENGTH_SHORT).show();
}
});
}
public void datePicker(final EditText text)
{
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
text.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
public void timePicker(final EditText text)
{
final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
// Launch Time Picker Dialog
TimePickerDialog timePickerDialog = new TimePickerDialog(this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
text.setText(hourOfDay + ":" + minute);
}
}, mHour, mMinute, false);
timePickerDialog.show();
}
public void onClickEvents()
{
fromDateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
datePicker(fromDate);
}
});
fromTimeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePicker(fromTime);
}
});
toDateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
datePicker(toDate);
}
});
toTimeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timePicker(toTime);
}
});
}
Я использовал тот же метод в своей деятельности по регистрации.
private static EditText inputEmail, inputPass, inputName, inputNumber;
private Button registerBtn, loginBtn;
FirebaseAuth auth;
DatabaseReference reference;
public static String email, password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null)
{
startActivity(new Intent(registeration.this, MainActivity.class));
finish();
}
setContentView(R.layout.activity_registeration);
auth = FirebaseAuth.getInstance();
inputEmail = (EditText) findViewById(R.id.register_email);
inputPass = (EditText) findViewById(R.id.register_password);
inputName = (EditText) findViewById(R.id.register_name);
inputNumber = (EditText) findViewById((R.id.register_phone));
registerBtn = (Button) findViewById((R.id.register_btn));
loginBtn = (Button) findViewById(R.id.register_login);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(registeration.this, Login.class));
}
});
takeInput();
}
// to get user input
public void takeInput()
{
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
email = inputEmail.getText().toString();
password = inputPass.getText().toString();
if (TextUtils.isEmpty(email))
{
Toast.makeText(getApplicationContext(), "Enter an email address", Toast.LENGTH_SHORT).show();
return;
}
else if (TextUtils.isEmpty(password))
{
Toast.makeText(registeration.this, "Enter a password", Toast.LENGTH_SHORT).show();
return;
}
else if (password.length() < 6)
{
Toast.makeText(registeration.this, "Password too short, should contain atleast 6 characters", Toast.LENGTH_SHORT).show();
return;
}
Registeruser();
}
});
}
//to register the user in Firebase
public void Registeruser()
{
final String name = inputName.getText().toString();
final String number = inputNumber.getText().toString();
auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful())
{
Toast.makeText(registeration.this, "Regsteration failed !" + task.getException(), Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(registeration.this, "Registeration succesful", Toast.LENGTH_SHORT).show();
mapData(name , number);
}
}
});
}
//to map the user inputs to datatbase
public void mapData(String name , String number)
{
FirebaseUser user = auth.getCurrentUser();
String userId = user.getUid();
reference = FirebaseDatabase.getInstance().getReference("Users").child(userId);
HashMap<String, String> hashmap = new HashMap<>();
hashmap.put("id", userId);
hashmap.put("name", name);
hashmap.put("number", number);
reference.setValue(hashmap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful())
{
Intent intent = new Intent(registeration.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
else
{
Toast.makeText(getApplicationContext(), "User registeration failed! Please try again later", Toast.LENGTH_SHORT).show();
return;
}
}
});
}
@Override
protected void onResume() {
super.onResume();
}