Я обычно создаю отдельное занятие для настройки фотографии профиля. Возможно, вместо вызова onRegistrationComplete вызовите onCompleteListener после setValue (userAttributes), например так:
the_user_database.setValue(userAttributes).addOnCompleteListener(new OnCompleteListener...){
Intent intent = new Intent(context, AddProfileActivity.class);
startActivity(intent);
В следующем упражнении это может быть простой XML макет с кнопкой и ImageView.
Этот код может открыть вашу галерею, выбрать изображение и поместить его в ваше изображение в методе onActivityResult:
private void selectPhotoFromGallery(){
Log.d(TAG, "selectPhotoFromGallery: started");
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, GALLERY_PICK);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GALLERY_PICK){
if (resultCode == RESULT_OK && data != null){
contentUri = data.getData();
try{
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentUri);
profile_photo.setImageBitmap(bitmap);
}catch (IOException e){
Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
}
Затем вам понадобится метод для загрузки вашего изображения в FirebaseStorage и захвата downloadUrl для добавления на нужный узел. В этом случае, потому что вы добавляете в существующий узел, вы вызываете updateChildren () при добавлении фотографии профиля. Я использую метод, подобный этому:
private void uploadProfileImage(){
Log.d(TAG, "uploadProfileImage: uploading image....");
if (contentUri != null){
//from gallery
final StorageReference reference = FirebaseStorage.getInstance().getReference().child(currentUserID).child("profile_photo");
reference.putFile(contentUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String profilePhotoUri = uri.toString();
DatabaseReference publicUserReference = FirebaseDatabase.getInstance().getReference().child("public_user")
.child(currentUserID);
HashMap hashMap = new HashMap();
hashMap.put("profile_photo", profilePhotoUri);
publicUserReference.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()){
Intent intent = new Intent(mContext, CompleteProfileActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
}
});
}
});
}
});
}
}
Вы должны будете настроить это для ваших конкретных потребностей c, очевидно. То, что вы действительно пытаетесь сделать, это сохранить изображение в хранилище и получить строку http://..., где оно хранится, а затем вставить эту информацию в то же место, что и предыдущая информация, которую вы предоставили.
Надеюсь, это будет полезным советом. https://www.youtube.com/watch?v=mPOhnTnLcSY Это ссылка на видео о загрузке изображений в хранилище Firebase для получения дополнительной информации, если вам это нужно. Удачи!