【问题标题】:How to update profile image to firebase after select picture and crop it?选择图片并裁剪后如何将个人资料图片更新到firebase?
【发布时间】:2019-08-06 12:52:22
【问题描述】:

选择图像并裁剪后,如何将当前用户个人资料图片更新到 Firebase?

这是我的代码:

@Override
public 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();
            }
        }
    }
}

我如何从那里继续?有什么建议吗?

【问题讨论】:

  • 总之,您想知道如何将图像上传到 Firebase 存储?
  • 正如@TaslimOseni 所说,您为什么不直接使用 Firebase 存储?你的意思是它将替换当前的用户图像?不想换吗?
  • @Daniel 那是给 Swift 的,不是吗?
  • 哦,是的,对不起,你是对的。我看错了标签。
  • 如果有帮助也请点赞:)

标签: java android firebase firebase-authentication


【解决方案1】:

有很多选择:

  1. 我会使用的最有用的方法之一是将图片上传到Firebase Storage。上传它真的很容易,每当您的用户再次登录时,您都可以将文件下载到本地存储以供日常使用。
  2. 另一个选项(这有点笨拙)可能是将位图的像素数组存储在 firebase 节点中。它速度极快,您可以将其存储在您的 firebase 数据库中,也可以存储在您的共享首选项中。通过使用额外的压缩功能,您甚至可以增强该功能。

不过,我建议使用 Firebase 存储,因为它是唯一的安全选项。所以去吧。对于 firebase 存储,请查看此链接,它是文档(很容易理解):

https://firebase.google.com/docs/storage/android/upload-files

还有这里:https://code.tutsplus.com/tutorials/image-upload-to-firebase-in-android-application--cms-29934

【讨论】:

    【解决方案2】:

    这是对我有用的选项。 首先,确保您的 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();
            }
        }
    }                                         
    

    如果您正在寻找比我更好地解释这个概念的人,我建议您点击此链接。创作者制作了一个具有所有这些功能的功能齐全的安卓社交媒体应用程序。

    https://www.youtube.com/playlist?list=PLxefhmF0pcPnTQ2oyMffo6QbWtztXu1W_

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多