Java 如何更新firebase用户android的个人资料图片?
我有一个拥有用户名、电子邮件和个人资料图片的用户,但我在注册时将个人资料图片设置为空字符串。我正在尝试更新配置文件pic并用当前用户设置它,但我得到了一个错误Java 如何更新firebase用户android的个人资料图片?,java,android,firebase,firebase-realtime-database,firebase-storage,Java,Android,Firebase,Firebase Realtime Database,Firebase Storage,我有一个拥有用户名、电子邮件和个人资料图片的用户,但我在注册时将个人资料图片设置为空字符串。我正在尝试更新配置文件pic并用当前用户设置它,但我得到了一个错误 mProfilePic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_P
mProfilePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY_INTENT);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK && data != null && data.getData() != null){
mainImageURI = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mainImageURI);
mProfilePic.setImageBitmap(bitmap);
final ProgressDialog proDialog = new ProgressDialog(HomeActivity.this);
proDialog.setTitle("Uploading...");
proDialog.show();
final StorageReference mRef = mStorage.child("Photos").child(mainImageURI.getLastPathSegment());
mRef.putFile(mainImageURI).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> uri = taskSnapshot.getMetadata().getReference().getDownloadUrl();
Log.i("uploaded", mDatabase.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("image").setValue(uri).toString());
mDatabase.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("image").setValue(uri).toString();
proDialog.dismiss();
Toast.makeText(HomeActivity.this, "Uploaded", Toast.LENGTH_LONG).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
proDialog.dismiss();
Toast.makeText(HomeActivity.this, "Upload Failed "+e.getMessage(), Toast.LENGTH_LONG).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
proDialog.setMessage("Uploaded "+(int)progress+"%");
}
});
} catch(IOException e) {
e.printStackTrace();
}
}
}
用户->(uid)->用户名、电子邮件、图像
当用户注册时,所有字段都是字符串,图像为空。这是更新配置文件图片的方法,然后您可以在mFirebaseUser上调用它
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("Jane Q. User")
.setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
}
}
});
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates=新建UserProfileChangeRequest.Builder()
.setDisplayName(“Jane Q.User”)
.setPhotoUri(Uri.parse(“https://example.com/jane-q-user/profile.jpg"))
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标签“用户配置文件更新”);
}
}
});
您可以发布您的数据库结构吗?您的数据库有问题reference@GastónSaillén我添加了数据库结构我认为问题可能出在您的uri中,因为setValue抛出了一个错误,您可以记录任务uri=taskSnapshot.getMetadata().getReference().getDownloadUrl()的内容吗;返回?请查看文档以了解如何更新FirebaseUser
对象的属性。这是它记录的内容:com.google.android.gms.tasks。zzu@51f60f7How我是否获取要解析的uri 1。放置链接(字符串)。2.在链接(字符串)处按ALT+ENTER,如何获取用户从手机照片存储中获取的图像链接?显然,从手机获取图像,并上传到firebase数据库。因此,我应该将代码中的uri放入uri.parse?
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("Jane Q. User")
.setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
}
}
});