首页 > 解决方案 > firebase / glide 创建图像的引用并显示它

问题描述

我正在尝试让用户上传图片,然后将其显示为个人资料图片。我能够成功地将图像上传到firebase,但我无法显示它我正在关注这个线程 我面临的当前问题是如何成功获取图像url以便能够显示它

代码的当前状态

    private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

//Android Layout

private CircleImageView mDisplayImage;
private TextView mName;
private TextView mStatus;

private Button mStatusBtn;
private Button mImageBtn;

private ProgressDialog mProgressDialog;

private static final int GALLERY_PICK = 1;

private StorageReference mImageStorage;

private Context context = user_profile.this;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_profile);

    mDisplayImage = (CircleImageView) findViewById(R.id.profile_picture);
    mName = (TextView) findViewById(R.id.profile_user_name);
    mStatus = (TextView) findViewById(R.id.profile_user_status);

    mStatusBtn = (Button) findViewById(R.id.profile_change_status_btn);
    mImageBtn = (Button) findViewById(R.id.profile_change_image_btn);
    mImageStorage = FirebaseStorage.getInstance().getReference();

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

    String current_uid = mCurrentUser.getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
    mUserDatabase.keepSynced(true);

    mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String name = Objects.requireNonNull(dataSnapshot.child("name").getValue()).toString();
            String status = Objects.requireNonNull(dataSnapshot.child("status").getValue()).toString();
            String image = Objects.requireNonNull(dataSnapshot.child("image").getValue()).toString();

            mName.setText(name);
            mStatus.setText(status);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    mStatusBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String status_value = mStatus.getText().toString();

            Intent status_intent = new Intent(user_profile.this, change_status.class);
            status_intent.putExtra("status_value", status_value);
            startActivity(status_intent);

        }
    });

    mImageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent galleryIntent = new Intent();
            galleryIntent.setType("image/*");
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(galleryIntent, "Select Image"), GALLERY_PICK);
        }
    });

}

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

    if (requestCode == GALLERY_PICK && resultCode == RESULT_OK) {

        String imageUri = data.getDataString();

        CropImage.activity(Uri.parse(imageUri))
                .setAspectRatio(1, 1)
                .start(this);
    }

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == RESULT_OK) {


            mProgressDialog = new ProgressDialog((user_profile.this));
            mProgressDialog.setTitle("Uploading");
            mProgressDialog.setMessage("Pleas Stand By");
            mProgressDialog.setCanceledOnTouchOutside(false);
            mProgressDialog.show();

            Uri resultUri = result.getUri();

            String current_user_id = mCurrentUser.getUid();

            StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + (".jpeg"));
            filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    if (task.isSuccessful()) {

                        final String download_url = Objects.requireNonNull(task.getResult()).getStorage().getDownloadUrl().toString();

                        mUserDatabase.child("image").setValue(download_url).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                if (task.isSuccessful()) {

                                    Glide
                                            .with(context)
                                            .load()
                                            .into(mDisplayImage);

                                    mProgressDialog.dismiss();
                                    Toast.makeText(user_profile.this, "Succesful Upload", Toast.LENGTH_LONG).show();

                                }
                            }
                        });


                    } else {
                        Toast.makeText(user_profile.this, "Error Up Loading", Toast.LENGTH_SHORT).show();
                        mProgressDialog.dismiss();
                    }

                }
            });

        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
            Exception error = result.getError();
        }
    }

}


public String niceRefLink (String date){

    StorageReference storageRef = FirebaseStorage.getInstance().getReference();
    StorageReference dateRef = storageRef.child("profile_images");
    return dateRef.toString();
}}

我相信问题出在这段代码上

    public String niceRefLink (String date){

    StorageReference storageRef = FirebaseStorage.getInstance().getReference();
    StorageReference dateRef = storageRef.child("profile_images");
    return dateRef.toString();
}}

当试图显示图像时,滑翔说它无法找到图像,这就是我的数据库的样子 数据库

我尝试使用方法 niceRefLink 来显示图像但我不成功我也尝试了我创建的 download_url 字符串但也没有工作

数据库

嗨,我尝试了您提交的答案,但我仍然遇到问题图像已成功上传到数据库但是当我运行应用程序时它仍然没有显示我正在成功上传 toast 但图像仍然是预览图像.

private String mImageUri;

    private void getUserInfo(){
    mUserDatabase.child("Users").addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();

                if(map.get("image")!=null){
                    mImageUri = map.get("image").toString();
                    Glide.with(getApplication()).load(mImageUri).into(mDisplayImage);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }

    });
}

标签: androidfirebaseandroid-glide

解决方案


这段代码是,如何获取图像 url 以及如何在 ImageView 中显示。

  private void getUserInfo(){
        mCustomerDatabase.child("Users").child(current_uid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
                    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();

                    if(map.get("image")!=null){
                        mProfileImageUrl = map.get("image").toString();
                        Glide.with(getApplication()).load(mProfileImageUrl).into(profileImage);
                    }

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }

        });

    }

希望它的帮助充分和享受。


推荐阅读