Java 将用户ID与Firebase中的唯一照片连接

Java 将用户ID与Firebase中的唯一照片连接,java,firebase,Java,Firebase,我有一个应用程序,它可以创建一个用户,这是完美的工作,我很高兴 以下是一种将用户添加到Firebase数据库的简单方法: public void addUserInfoToDatabase(){ String user_id = mAuth.getCurrentUser().getUid(); final DatabaseReference the_user_database = FirebaseDatabase.getInstance().getReference().

我有一个应用程序,它可以创建一个用户,这是完美的工作,我很高兴

以下是一种将用户添加到Firebase数据库的简单方法:

    public void addUserInfoToDatabase(){
    String user_id = mAuth.getCurrentUser().getUid();
    final DatabaseReference the_user_database = FirebaseDatabase.getInstance().getReference().child("UserRegistraion").child(user_id);


    Map userAttributes = new HashMap();
    userAttributes.put("user_id", user_id);
    userAttributes.put("username", userName);
    userAttributes.put("name", name);
    userAttributes.put("e-mail", email);

    the_user_database.setValue(userAttributes);
    if (mRegistrationListener != null)
        mRegistrationListener.onRegistrationComplete(true); // Assumes success

}
下面是用户注册时表的外观:

我现在想做的是,我希望能够添加属于每个用户的个人资料图片:例如,个人资料图片、家庭图片等

问题是:我如何在Firebase中做到这一点?我不是要求任何人帮我做这件事,只是想给我一个好的提示或提供一个如何做的指南/视频


谢谢。

我通常会创建一个单独的活动来设置个人资料照片。可以在setValueuserAttributes之后调用onCompleteListener,而不是调用onRegistrationComplete,如下所示:

the_user_database.setValue(userAttributes).addOnCompleteListener(new OnCompleteListener...){
Intent intent = new Intent(context, AddProfileActivity.class);
startActivity(intent);
private void uploadProfileImage(){
        Log.d(TAG, "uploadProfileImage: uploading image....");
        if (contentUri != null){
            //from gallery
            final StorageReference reference = FirebaseStorage.getInstance().getReference().child(currentUserID).child("profile_photo");
            reference.putFile(contentUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String profilePhotoUri = uri.toString();
                            DatabaseReference publicUserReference = FirebaseDatabase.getInstance().getReference().child("public_user")
                                    .child(currentUserID);
                            HashMap hashMap = new HashMap();
                            hashMap.put("profile_photo", profilePhotoUri);
                            publicUserReference.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener() {
                                @Override
                                public void onComplete(@NonNull Task task) {
                                    if (task.isSuccessful()){
                                        Intent intent = new Intent(mContext, CompleteProfileActivity.class);
                                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intent);
                                        finish();
                                    }
                                }
                            });

                        }
                    });
                }
            });
        }
    }
在下一个活动中,它可以是一个带有按钮和ImageView的简单XML布局

此代码可以打开您的多媒体资料,选择图像,然后将其放置在onActivityResult方法的imageview中:

private void selectPhotoFromGallery(){
        Log.d(TAG, "selectPhotoFromGallery: started");
        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, GALLERY_PICK);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == GALLERY_PICK){
            if (resultCode == RESULT_OK && data != null){
                contentUri = data.getData();
                try{
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentUri);
                    profile_photo.setImageBitmap(bitmap);
                }catch (IOException e){
                    Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }
    }
然后需要一种方法将图像上载到FirebaseStorage,并捕获下载的URL以添加到所需的节点。在这种情况下,由于要添加到现有节点,因此在添加配置文件照片时称为updateChildren。我使用这样的方法:

the_user_database.setValue(userAttributes).addOnCompleteListener(new OnCompleteListener...){
Intent intent = new Intent(context, AddProfileActivity.class);
startActivity(intent);
private void uploadProfileImage(){
        Log.d(TAG, "uploadProfileImage: uploading image....");
        if (contentUri != null){
            //from gallery
            final StorageReference reference = FirebaseStorage.getInstance().getReference().child(currentUserID).child("profile_photo");
            reference.putFile(contentUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String profilePhotoUri = uri.toString();
                            DatabaseReference publicUserReference = FirebaseDatabase.getInstance().getReference().child("public_user")
                                    .child(currentUserID);
                            HashMap hashMap = new HashMap();
                            hashMap.put("profile_photo", profilePhotoUri);
                            publicUserReference.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener() {
                                @Override
                                public void onComplete(@NonNull Task task) {
                                    if (task.isSuccessful()){
                                        Intent intent = new Intent(mContext, CompleteProfileActivity.class);
                                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intent);
                                        finish();
                                    }
                                }
                            });

                        }
                    });
                }
            });
        }
    }
显然,您需要根据您的具体需求调整此设置。您真正想做的事情是将图像保存到存储器中并获取http://... 字符串存储位置,然后将该信息插入到与先前提供的信息相同的位置

我希望这是一个有用的提示。这是一个关于将图像上传到Firebase存储的视频链接,如果您需要,可获取更多信息。祝你好运