【发布时间】:2021-03-13 00:02:51
【问题描述】:
我在 Android Studio 中使用 Firebase 身份验证处理一个项目。当用户的图像存储在 Firebase 存储中时,我无法将用户存储在 Firebase 数据库中。因此,它不会进入下一个活动并卡住。
ActivitySetupProfileBinding binding;
FirebaseAuth auth;
FirebaseDatabase database;
FirebaseStorage storage;
Uri selectedImage;
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivitySetupProfileBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
dialog = new ProgressDialog(this);
dialog.setMessage("Updating Profile..");
dialog.setCancelable(false);
database = FirebaseDatabase.getInstance();
storage = FirebaseStorage.getInstance();
auth = FirebaseAuth.getInstance();
getSupportActionBar().hide();
binding.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 45);
}
});
binding.continueBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = binding.nameBox.getText().toString();
if(name.isEmpty()) {
binding.nameBox.setError("Name cannot be empty..");
return;
}
dialog.show();
if(selectedImage !=null) {
StorageReference reference = storage.getReference().child("Profiles").child(auth.getUid());
reference.putFile(selectedImage).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()) {
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString();
String uid = auth.getUid();
String phone = auth.getCurrentUser().getPhoneNumber();
String name = binding.nameBox.getText().toString();
User user = new User(uid, name, phone, imageUrl);
database.getReference()
.child("users")
.child(uid)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
dialog.dismiss();
Intent intent = new Intent (SetupProfileActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
});
}
}
});
} else {
String uid = auth.getUid();
String phone = auth.getCurrentUser().getPhoneNumber();
User user = new User(uid, name, phone, "No Image");
database.getReference()
.child("users")
.child(uid)
.setValue(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
dialog.dismiss();
Intent intent = new Intent (SetupProfileActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null) {
if(data.getData() != null) {
binding.imageView.setImageURI(data.getData());
selectedImage = data.getData();
}
}
}
【问题讨论】:
-
这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗?
-
嗨,Alex,一旦我执行了这段代码,它就会卡在当前的活动中,并且不会移动到下一个活动。它应该将用户的信息存储在 Firebase 中,但它没有发生。我期待用户存储在火力基地中,我可以进行下一个活动。谢谢!
-
你有没有试过实现onFailure,看看有没有问题?
-
我会这样做并让你知道。
标签: android firebase-realtime-database