为了账号安全,请及时绑定邮箱和手机立即绑定

选择图片并裁剪后如何将个人资料图片更新为 firebase?

选择图片并裁剪后如何将个人资料图片更新为 firebase?

慕妹3242003 2023-05-17 17:20:31
选择图片并裁剪后,如何将当前用户个人资料图片更新到 firebase?这是我的代码:@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE && resultCode == RESULT_OK){        Uri imageUri = CropImage.getPickImageResultUri(getActivity(),data);        cropRequest(imageUri);    }    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){        CropImage.ActivityResult result = CropImage.getActivityResult(data);        if (resultCode == RESULT_OK){            try {                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), result.getUri());                imgUserProfile.setImageBitmap(bitmap);                final ProgressDialog pd = new ProgressDialog(getContext());                pd.setMessage("Please wait ");                pd.show();            } catch (IOException e){                e.printStackTrace();            }        }    }}我如何从那里继续?有什么建议么?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

有很多选择:

  1. 我会使用的最有用的方法之一是将图片上传到Firebase Storage. 上传它真的很容易,每当您的用户再次登录时,您都可以将文件下载到本地存储以供日常使用。

  2. 另一种选择(这有点笨拙)可能是将位图的像素数组存储在 firebase 节点中。它非常快,您可以将其存储在您的 firebase 数据库中,也可以存储在您的共享首选项中。通过使用额外的压缩功能,您甚至可以增强该功能。

但是,我建议使用 firebase 存储,因为它是唯一的安全选项。所以去吧。

查看完整回答
反对 回复 2023-05-17
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

这是对我有用的选项。首先,确保你的 firebase 正确设置了实时数据库和存储。然后在你的构建gradle中;


implementation 'de.hdodenhof:circleimageview:2.2.0'

implementation 'com.squareup.picasso:picasso:2.5.2'

在更新个人资料图像的活动中,创建对图像的引用和 Firebase Storagebase 引用。还要添加这四行:


private FirebaseAuth mAuth;

private DatabaseReference UsersRef;

private CircleImageView ProfileImage;

private StorageReference UserProfileImageRef;

String currentUserID;

final static int Gallery_Pick = 1;

在您的 onCreate 方法中,包括以下代码行:


mAuth = FirebaseAuth.getInstance();

currentUserID = mAuth.getCurrentUser().getUid();

UsersRef= FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);

UserProfileImageRef = FirebaseStorage.getInstance().getReference().child("Profile Images");`

另外,将其添加到您的 on create 方法中。这允许用户更新他们的图片:


UsersRef.addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(DataSnapshot dataSnapshot)

        {

            if(dataSnapshot.exists())

            {

                if (dataSnapshot.hasChild("profileimage"))

                {

                    String image = dataSnapshot.child("profileimage").getValue().toString();

                    Picasso.with(SetupActivity.this).load(image).placeholder(R.drawable.profile).into(ProfileImage);

                }

                else

                {

                    Toast.makeText(SetupActivity.this, "Please select profile image first.", Toast.LENGTH_SHORT).show();

                }

            }

        }`


        @Override

        public void onCancelled(DatabaseError databaseError) {


        }

    };

这将允许用户从他的设备中选择不同的个人资料图像。它还将允许用户裁剪图像以适合屏幕。


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data)

{

    super.onActivityResult(requestCode, resultCode, data);


    if(requestCode==Gallery_Pick && resultCode==RESULT_OK && data!=null)

    {

        Uri ImageUri = data.getData();


        CropImage.activity()

                .setGuidelines(CropImageView.Guidelines.ON)

                .setAspectRatio(1, 1)

                .start(this);

    }


    if(requestCode==CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)

    {

        CropImage.ActivityResult result = CropImage.getActivityResult(data);


        if(resultCode == RESULT_OK)

        {

            loadingBar.setTitle("Profile Image");

            loadingBar.setMessage("Please wait, while we updating your profile image...");

            loadingBar.show();

            loadingBar.setCanceledOnTouchOutside(true);


            Uri resultUri = result.getUri();


            StorageReference filePath = UserProfileImageRef.child(currentUserID + ".jpg");


            filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {

                @Override

                public void onComplete(@NonNull final Task<UploadTask.TaskSnapshot> task)

                {

                    if(task.isSuccessful())

                    {

                        Toast.makeText(SetupActivity.this, "Profile Image stored successfully to Firebase storage...", Toast.LENGTH_SHORT).show();


                        final String downloadUrl = task.getResult().getDownloadUrl().toString();


                        UsersRef.child("profileimage").setValue(downloadUrl)

                                .addOnCompleteListener(new OnCompleteListener<Void>() {

                                    @Override

                                    public void onComplete(@NonNull Task<Void> task)

                                    {

                                        if(task.isSuccessful())

                                        {

                                            Intent selfIntent = new Intent(SetupActivity.this, SetupActivity.class);

                                            startActivity(selfIntent);


                                            Toast.makeText(SetupActivity.this, "Profile Image stored to Firebase Database Successfully...", Toast.LENGTH_SHORT).show();

                                            loadingBar.dismiss();

                                        }

                                        else

                                        {

                                            String message = task.getException().getMessage();

                                            Toast.makeText(SetupActivity.this, "Error Occured: " + message, Toast.LENGTH_SHORT).show();

                                            loadingBar.dismiss();

                                        }

                                    }

                                });

                    }

                }

            });

        }

        else

        {

            Toast.makeText(this, "Error Occured: Image can not be cropped. Try Again.", Toast.LENGTH_SHORT).show();

            loadingBar.dismiss();

        }

    }

}                                         

查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信