【问题标题】:Android uploading profile picture for a Firebase authenticated userAndroid 为经过 Firebase 身份验证的用户上传个人资料图片
【发布时间】:2020-01-16 13:18:42
【问题描述】:

我正在尝试将图像添加到 Firebase 存储,每个用户都可以从他的文件或相机上传他的个人资料图片,并且应该将其存储在以他的 uid 作为名称的自己的文件夹中。我有以下代码,但是按下 ImageView 没有任何作用:

public class ProfileFragment extends Fragment {

    CircleImageView profileImage;
    TextView email;

    public StorageReference storageRef;
    FirebaseStorage storage;


    public static ProfileFragment newInstance() {
        ProfileFragment profileFragment = new ProfileFragment();
        return profileFragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_profile, container, false);

        profileImage = view.findViewById(R.id.profile_image);
        email = view.findViewById(R.id.email);

        String user = FirebaseAuth.getInstance().getCurrentUser().getEmail();
        email.setText(user);

        storageRef = storage.getReference();

        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        final String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        final Uri contentURI = data.getData();

        profileImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(contentURI != null) {

                    StorageReference childRef = storageRef.child("/images/"+ userUid +".jpg");

                    UploadTask uploadTask = childRef.putFile(contentURI);
                    uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Toast.makeText(getActivity(), "Upload successful", Toast.LENGTH_SHORT).show();
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(getActivity(), "Upload Failed" + e, Toast.LENGTH_SHORT).show();
                        }
                    });
                }
                else {
                    Toast.makeText(getActivity(), "Select an image", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

根据我的阅读,onActivityResult 不适用于片段,但是我无法思考或找到任何关于它应该如何工作的主题。有人可以帮我完成这项工作,还有,我上传后如何获取每个用户的个人资料图片?我正在使用带有电子邮件、谷歌和 Facebook 身份验证的内置 Firebase 身份验证系统,并且我试图在不将用户另外存储在数据库中的情况下使其工作。 提前致谢!

【问题讨论】:

    标签: android firebase android-fragments firebase-authentication


    【解决方案1】:

    在 sn-p 下试试这个:

    第 1 步:- 在 build.gradle (Module:app) 文件中添加 firebase 存储依赖项。 firebase 存储的最新依赖项是:

     implementation 'com.google.firebase:firebase-storage:19.1.0'
    

    第二步:-设置activity_main.xml布局文件

    第 3 步:- 设置 MainActivity.java 文件

    FirebaseStorage  storage = FirebaseStorage.getInstance(); 
    StorageReference  storageReference = storage.getReference();
    
            private void uploadImage() 
            { 
                if (filePath != null) { 
    
                    // Code for showing progressDialog while uploading 
                    ProgressDialog progressDialog = new ProgressDialog(this); 
                    progressDialog.setTitle("Uploading..."); 
                    progressDialog.show(); 
    
                    // Defining the child of storageReference 
                    StorageReferenceref=storageReference.child("images/"+UUID.randomUUID().toString(); 
    
                    // adding listeners on upload 
                    // or failure of image 
                    ref.putFile(filePath) 
                        .addOnSuccessListener( 
                            new OnSuccessListener<UploadTask.TaskSnapshot>() { 
    
                                @Override
                                public void onSuccess( 
                                    UploadTask.TaskSnapshot taskSnapshot) 
                                { 
    
                                    // Image uploaded successfully 
                                    // Dismiss dialog 
                                    progressDialog.dismiss(); 
                                    Toast 
                                        .makeText(MainActivity.this, 
                                                  "Image Uploaded!!", 
                                                  Toast.LENGTH_SHORT) 
                                        .show(); 
                                } 
                            }) 
    
                        .addOnFailureListener(new OnFailureListener() { 
                            @Override
                            public void onFailure(@NonNull Exception e) 
                            { 
    
                                // Error, Image not uploaded 
                                progressDialog.dismiss(); 
                                Toast 
                                    .makeText(MainActivity.this, 
                                              "Failed " + e.getMessage(), 
                                              Toast.LENGTH_SHORT) 
                                    .show(); 
                            } 
                        }) 
                        .addOnProgressListener( 
                            new OnProgressListener<UploadTask.TaskSnapshot>() { 
    
                                // Progress Listener for loading 
                                // percentage on the dialog box 
                                @Override
                                public void onProgress( 
                                    UploadTask.TaskSnapshot taskSnapshot) 
                                { 
                                    double progress 
                                        = (100.0
                                           * taskSnapshot.getBytesTransferred() 
                                           / taskSnapshot.getTotalByteCount()); 
                                    progressDialog.setMessage( 
                                        "Uploaded "
                                        + (int)progress + "%"); 
                                } 
                            }); 
                } 
            } 
    

    【讨论】:

    • 感谢阅读我的指南。我认为您传递了错误的上下文请传递当前片段上下文以便调用当前片段 onActivityResult() 方法。
    • 对不起,我听不懂你。您正在参考本指南:code.tutsplus.com/tutorials/…
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 2017-05-04
    • 2019-11-25
    • 1970-01-01
    • 2011-06-13
    • 2022-07-13
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多