-1

I try to make register but when i put all information the app close in the post i have the error. i wanna make this this my code.

package com.example.aprendosiosi;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
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.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;

import java.util.HashMap;
import java.util.Map;

public class RegistersActivity extends AppCompatActivity {

    Button btn_register;
    EditText name,email,password;
    FirebaseFirestore mFirestore;
    FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registers);
        mFirestore = FirebaseFirestore.getInstance();
        mAuth = FirebaseAuth.getInstance();

        name = findViewById(R.id.nombre);
        email = findViewById(R.id.correo);
        password = findViewById(R.id.contrasena);
        btn_register = findViewById(R.id.btn_registro);

        //evento del boton//
        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //extrayendo el dato que se escriba//
                String nameUser = name.getText().toString().trim();
                String emailUser = email.getText().toString().trim();
                String passUser = password.getText().toString().trim();

                if( nameUser.isEmpty() && emailUser.isEmpty() && passUser.isEmpty()){

                    Toast.makeText(RegistersActivity.this, "Complete los datos", Toast.LENGTH_SHORT).show();

                } else{
                        //creando un metodo para registrar//
                    registerUser(nameUser,emailUser,passUser);

                }
            }
        });
    }
    //construyendo el metodo //
    private void registerUser(String nameUser, String emailUser, String passUser) {
//prosedimiento para registrase//
        mAuth.createUserWithEmailAndPassword(emailUser,passUser).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                String id = mAuth.getCurrentUser().getUid();
                Map<String, Object> map = new HashMap<>();
                map.put("id", id);
                map.put("name", nameUser);
                map.put("email", emailUser);
                map.put("password", passUser);

                mFirestore.collection("user").document(id).set(map).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void unused) {
                        finish();
                        startActivity( new Intent( RegistersActivity.this, MainActivity.class));
                        Toast.makeText(RegistersActivity.this, "Usuario registrado", Toast.LENGTH_SHORT).show();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(RegistersActivity.this, "Erro al guardar", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(RegistersActivity.this, "Erro al registrar", Toast.LENGTH_SHORT).show();
            }
        });


    }
}

And this my error .

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.aprendosiosi, PID: 9539 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference at com.example.aprendosiosi.RegistersActivity$3.onComplete(RegistersActivity.java:70) at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.0.2:1) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8633) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

I try to make register but when i put all information the app close in the post i have the error.

1 Answers1

0

I think the problem is at this line

String id = mAuth.getCurrentUser().getUid();

the getCurrentUser() method may return a Null object and then the getUid() will give you the NullPointerException , you should write this instead

FirebaseUser mFirebaseUser = mAuth.getCurrentUser();
if(mFirebaseUser != null) {
    currentUserID = mFirebaseUser.getUid(); 
    //Do what you need to do with the id
}

you may refer to this answer as well

Samuii
  • 1