我的应用程序返回到上一页,而不将数据更新到数据库.(使用安卓工作室+Firebase)



我的应用程序返回到上一页,而不将数据更新到数据库。(使用安卓工作室+Firebase(这是活动的java代码

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();
}
});
}
}

这是当时的日志,我已经尝试过调试,但无法获得任何解决方案。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

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'

您应该在调用其子级之前初始化storage reference,因此在uploadImage((中,在开头添加2行:

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);

最新更新