Skip to content
Advertisement

My app is gets back to previous page without updating data to database. (Using Android studio + Firebase)

My app is gets back to previous page without updating data to database. (Using Android studio + Firebase) This is the java code for the activity

 package com.example.hospital_management_system;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
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.android.material.textfield.TextInputEditText;
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 com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import java.util.HashMap;
import java.util.UUID;

import de.hdodenhof.circleimageview.CircleImageView;

public class DoctorRegistrationActivity extends AppCompatActivity {
private TextView backToLogin;
private TextInputEditText dregistrationFullName, dregistrationIdNumber,             
dregistrationPhoneNumber, doctorRegMailId, doctorRegPassword;
private CircleImageView dprofileImage;
private Spinner availabilitySpinner,departmentSpinner,specializationSpinner;
private Button regButton;
public Uri resultUri;
private FirebaseAuth mAuth;
private FirebaseStorage Storage;
private StorageReference storageReference;
private DatabaseReference userDatabaseRef;

private ProgressDialog loader;

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_doctor_registration);
    backToLogin = findViewById(R.id.backToLogin);
    backToLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(DoctorRegistrationActivity.this,                   
LoginActivity.class);
            startActivity(intent);
        }
    });
    dregistrationFullName = findViewById(R.id.dregistrationFullName);
    dregistrationPhoneNumber = findViewById(R.id.dregistrationPhoneNumber);
    dregistrationIdNumber = findViewById(R.id.dregistrationIdNumber);
    doctorRegMailId = findViewById(R.id.doctorRegMailId);
    doctorRegPassword = findViewById(R.id.doctorRegPassword);
    regButton = findViewById(R.id.regButton);
    dprofileImage = findViewById(R.id.dprofileImage);
    departmentSpinner = (Spinner)findViewById(R.id.departmentSpinner);
    specializationSpinner =(Spinner)findViewById(R.id.specializationSpinner);
    availabilitySpinner =(Spinner)findViewById(R.id.availabilitySpinner);

    loader = new ProgressDialog(this);
    mAuth = FirebaseAuth.getInstance();

    dprofileImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            choosePicture();
        }
    });


    regButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("yoyoyoyoyoyoyo", "reg just  clicked ");
            final String email = doctorRegMailId.getText().toString().trim();
            final String password = doctorRegPassword.getText().toString().trim();
            final String fullName = dregistrationFullName.getText().toString().trim();
            final String idNumber = dregistrationIdNumber.getText().toString().trim();
            final String phoneNumber = 
dregistrationPhoneNumber.getText().toString().trim();
            Log.d("yoyoyoyoyoyoyo", "reached to spinner ");
            final String department = 
departmentSpinner.getSelectedItem().toString().trim();
            final String specialization = 
specializationSpinner.getSelectedItem().toString().trim();
            final String availability = 
availabilitySpinner.getSelectedItem().toString().trim();


            if (TextUtils.isEmpty(email)) {
                doctorRegMailId.setError("Email is Required!");
                return;
            }
            if (TextUtils.isEmpty(password)) {
                doctorRegPassword.setError("Password is Required!");
                return;
            }
            if (TextUtils.isEmpty(fullName)) {
                dregistrationFullName.setError("Name is Required!");
                return;
            }
            if (TextUtils.isEmpty(idNumber)) {
                dregistrationIdNumber.setError("IdNumber is Required!");
                return;
            }
            if (TextUtils.isEmpty(phoneNumber)) {
                dregistrationPhoneNumber.setError("PhoneNumber is Required!");
                return;
            }

            if(resultUri==null){
                Toast.makeText(DoctorRegistrationActivity.this, "profile is required", 
Toast.LENGTH_SHORT).show();
            }
            else{
                Log.d("yoyoyoyoyoyoyo", "else ");
                loader.setMessage("Registration in progress...");
                loader.setCanceledOnTouchOutside(false);
                loader.show();
                Log.d("yoyoyoyoyoyoyo", "reached to mauth ");
                
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new 
OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        if(task.isSuccessful()){
                            Log.d("yoyoyoyoyoyoyo", "task is successful ");
                            String currentUserId = mAuth.getCurrentUser().getUid();
                            userDatabaseRef = 
FirebaseDatabase.getInstance().getReference().child("users").child(currentUserId);
//                                userDatabaseRef.setValue("name",fullName);
//                                userDatabaseRef.setValue("email",email);
//                                userDatabaseRef.setValue("idnumber",idNumber);
//                                userDatabaseRef.setValue("phonenumber",phoneNumber);
//                                userDatabaseRef.setValue("department",department);
//                                
userDatabaseRef.setValue("specialization",specialization);
//                                userDatabaseRef.setValue("availability",availability);
                            HashMap doctorInfo = new HashMap();
                            Log.d("yoyoyoyoyoyoyo", "after hasmap");
                            doctorInfo.put("name",fullName);
                            doctorInfo.put("email",email);
                            doctorInfo.put("idnumber",idNumber);
                            doctorInfo.put("phonenumber",phoneNumber);
                            Log.d("yoyoyoyoyoyoyo", "after phone number ");
                            doctorInfo.put("department",department);
                            doctorInfo.put("specialization",specialization);
                            Log.d("yoyoyoyoyoyoyo", "after specialization ");
                            doctorInfo.put("availability",availability);
                            doctorInfo.put("type","doctor");
                            Log.d("yoyoyoyoyoyoyo", "after doctor ");

                            
userDatabaseRef.updateChildren(doctorInfo).addOnCompleteListener(new 
OnCompleteListener() {

                                @Override
                                public void onComplete(@NonNull Task task) {
                                    Log.d("yoyoyoyoyoyoyo", "before details set 
successfully ");
                                    if(task.isSuccessful()){
                                        Toast.makeText(DoctorRegistrationActivity.this, 
"Details set successfully", Toast.LENGTH_SHORT).show();
                                    }
                                    else{
                                        
Toast.makeText(DoctorRegistrationActivity.this,task.getException().toString() , 
Toast.LENGTH_SHORT).show();
                                    }
                                    finish();
                                    loader.dismiss();
                                }
                            });

                            if(resultUri!=null){

                                uploadImage();
                            }
                            Intent intent = new Intent(DoctorRegistrationActivity.this, 
LoginActivity.class);
                            startActivity(intent);
                            finish();
                            loader.dismiss();
                        }
                        else{
                            Log.d("yoyoyoyoyoyoyo", "else ");
                            String error = task.getException().toString();
                            Toast.makeText(DoctorRegistrationActivity.this, "Error 
Occurred: "+error, Toast.LENGTH_SHORT).show();}
                    }

                });
            }
        }
    });


}



private void choosePicture() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startForResult.launch(intent);
}
ActivityResultLauncher<Intent> startForResult = registerForActivityResult(new 
ActivityResultContracts.StartActivityForResult(), new 
ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
        if(result!=null&&result.getResultCode()==RESULT_OK){
            if(result.getData()!=null ){
                Intent data = result.getData();
                resultUri = data.getData();
                dprofileImage.setImageURI(resultUri);

            }
        }
    }
});

private void uploadImage(){

    final String randomKey = UUID.randomUUID().toString();
    // Create a reference to "mountains.jpg"
    StorageReference mountainsRef = storageReference.child("image/"+randomKey);

    mountainsRef.putFile(resultUri).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            Toast.makeText(DoctorRegistrationActivity.this, "Failed to Upload Image", 
Toast.LENGTH_SHORT).show();
        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override

        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

            Toast.makeText(DoctorRegistrationActivity.this, "Successfully Uploaded 
Image", Toast.LENGTH_SHORT).show();
        }
    });
}
}

This is the log at that time, I had already tried to debug but couldn’t get any solution……………………………………………………………………………..

   D/yoyoyoyoyoyoyo: task is successful 
   D/yoyoyoyoyoyoyo: after hasmap
   D/yoyoyoyoyoyoyo: after phone number 
   D/yoyoyoyoyoyoyo: after specialization 
   D/yoyoyoyoyoyoyo: after doctor 
   D/AndroidRuntime: Shutting down VM
   E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.example.hospital_management_system, PID: 12296
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.storage.StorageReference com.google.firebase.storage.StorageReference.child(java.lang.String)' on a null object reference
    at com.example.hospital_management_system.DoctorRegistrationActivity.uploadImage(DoctorRegistrationActivity.java:231)
    at com.example.hospital_management_system.DoctorRegistrationActivity.access$1200(DoctorRegistrationActivity.java:42)
    at com.example.hospital_management_system.DoctorRegistrationActivity$3$1.onComplete(DoctorRegistrationActivity.java:184)
    at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.0.1:1)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:236)
    at android.app.ActivityThread.main(ActivityThread.java:8061)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
I/Process: Sending signal. PID: 12296 SIG: 9
Disconnected from the target VM, address: 'localhost:54389', transport: 'socket'

Advertisement

Answer

You should initialize your storage reference before you call its child, so inside your uploadImage(), add 2 lines at the begining:

final String randomKey = UUID.randomUUID().toString();
// Create a reference to "mountains.jpg"
FirebaseStorage storage = FirebaseStorage.getInstance(); // add this
storageReference = storage.getReference(); // and this
StorageReference mountainsRef = storageReference.child("image/"+randomKey);
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement