Приложение падает при отображении данных в Firebase - PullRequest
0 голосов
/ 14 апреля 2020

Я делаю приложение по бронированию автомобилей, хочу взять данные от пользователя и отобразить их в базе данных. У меня есть вид деятельности рециркулятора в моей основной деятельности, когда пользователь нажимает на элемент, он направляется на подтверждение операции бронирования. Когда я пытаюсь передать переменные данные в базу данных, мое приложение падает. Это все, что я вижу в журнале.

`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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...