0

When clicking on button(bSave) and trying to save Name, Age and Id in realtime firebase database, app keeps stopping. Maybe the problem is with the connection between app and firebase ?

RegisterAcitivity

package com.example.mher.loginregister;

import android.app.ProgressDialog;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.security.cert.CertPathBuilderSpi;

public class RegisterActivity extends AppCompatActivity {

private EditText etAge;
private EditText etName;
private EditText etEmail;
private EditText etPassword;
private Button bRegister;
private Button bSave;
private ProgressDialog progressDialog;
private FirebaseAuth firebaseAuth;
DatabaseReference databaseDrivers;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    firebaseAuth=FirebaseAuth.getInstance();

    progressDialog=new ProgressDialog(this);

    etAge=(EditText) findViewById(R.id.etAge);
    etName=(EditText) findViewById(R.id.etName);
    etEmail=(EditText) findViewById(R.id.etEmail);
    etPassword=(EditText) findViewById(R.id.etPassword);
    bRegister=(Button) findViewById(R.id.bRegister);
    bSave=(Button) findViewById(R.id.bSave);
    databaseDrivers= FirebaseDatabase.getInstance().getReference();


    bSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            adddriver();
        }
    });




    bRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            registeruser();

        }
    });



}
private void adddriver()
{
    String name=etName.getText().toString().trim();
    String age=etAge.getText().toString().trim();
    if(!TextUtils.isEmpty(name))
    {
        String id=databaseDrivers.push().getKey();
        Driver driver=new Driver(id,name,age);
        databaseDrivers.child(id).setValue(driver);


    }
    else
    {
        Toast.makeText(this,"Please enter a name",Toast.LENGTH_SHORT);
    }
}
private void registeruser()
{
    String email=etEmail.getText().toString().trim();
    String password=etPassword.getText().toString().trim();
    if(TextUtils.isEmpty(email))
    {
        Toast.makeText(this,"Please Enter Your Email",Toast.LENGTH_SHORT).show();
        return;

    }
    if(TextUtils.isEmpty(password))
    {
        Toast.makeText(this,"Please Enter Your Password",Toast.LENGTH_SHORT).show();
        return;

    }
    progressDialog.setMessage("Registering User");
    progressDialog.show();
    firebaseAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful())
            {
                Toast.makeText(RegisterActivity.this,"Registered Successfully",Toast.LENGTH_SHORT).show();
                progressDialog.hide();
            }
            else
            {
                Toast.makeText(RegisterActivity.this,"Could Not Register Successfully",Toast.LENGTH_SHORT).show();
                progressDialog.hide();
            }

        }
    });

}

}

Driver Class

package com.example.mher.loginregister;

public class Driver {
String DriverId;
String DriverName;
String DriverAge;
public Driver()
{

}

public Driver(String driverId, String driverName, String driverAge) {
    DriverId = driverId;
    DriverName = driverName;
    DriverAge = driverAge;
}

public String getDriverId() {
    return DriverId;
}

public String getDriverName() {
    return DriverName;
}

public String getDriverAge() {
    return DriverAge;
}
}
  • Use LogCat to examine the Java stack trace associated with your crash: https://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this – CommonsWare Jul 08 '17 at 15:25

1 Answers1

0

I think it is because this:

String id=databaseDrivers.push().getKey();
Driver driver=new Driver(id,name,age);
databaseDrivers.child(id).setValue(driver);

getKey() retrieves value from server, so databaseDrivers.child(id).setValue(driver); must wait before it is done and it causes a freeze.

Try this:

DatabaseReference newPostRef = databaseDrivers.push(); 
newPostRef.setValue(driver);

or simplier:

databaseDrivers.push().setValue(driver);

This way you can't add an id to your driver object, but you don't need it because it is stored as a key to your value (driver).

Dexit
  • 23
  • 1
  • 6