Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更新firebase用户android的个人资料图片?_Java_Android_Firebase_Firebase Realtime Database_Firebase Storage - Fatal编程技术网

Java 如何更新firebase用户android的个人资料图片?

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

我有一个拥有用户名、电子邮件和个人资料图片的用户,但我在注册时将个人资料图片设置为空字符串。我正在尝试更新配置文件pic并用当前用户设置它,但我得到了一个错误

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.");
                }
            }
        });