当前位置: 首页 > 知识库问答 >
问题:

Android中的firebase图像检索

狄玉书
2023-03-14

我面临的问题是,在使用Gallery Intent从Gallery中选择图像时,虽然图像存储在Firebase存储中,但不显示在ImageView中。相反,占位符消失,什么也看不见。另外,我对Android和Firebase还不熟悉。

附上相同的截图。

上传前

上传后

以下是我的代码:

public class EditProfile extends AppCompatActivity {

Button selectImage, save_data_editProfile;
EditText editText, editText2;
ImageView imageView;
private StorageReference mStorage;
private Toolbar mToolBar;
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mFirebaseAuth;
private ProgressDialog mProgress;
private ImageButton mphotoPickerButton;
private String currentUserEmail;
private static final int GALLERY_INTENT = 2;
private DatabaseReference mCurrentUserDatabaseReference;
private Context mView;

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

    //selectImage = (Button) findViewById(R.id.selectImage);
    save_data_editProfile = (Button) findViewById(R.id.save_data_editProfile);
    //imageView = (ImageView) findViewById(R.id.imageView);
    editText = (EditText) findViewById(R.id.editText);
    editText2 = (EditText) findViewById(R.id.editText2);


    mView = EditProfile.this;
    initializeScreen();
    openImageSelector();
    initializeUserInfo();


}

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

    mStorage = FirebaseStorage.getInstance().getReference(); //make global
    super.onActivityResult(requestCode, requestCode, data);

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

        mProgress.setMessage("Uploading...");
        mProgress.show();

        Uri uri = data.getData();
        //Keep all images for a specific chat grouped together
        final String imageLocation = "Photos/profile_picture/" + currentUserEmail;
        final String imageLocationId = imageLocation + "/" + uri.getLastPathSegment();
        final String uniqueId = UUID.randomUUID().toString();
        final StorageReference filepath = mStorage.child(imageLocation).child(uniqueId + "/profile_pic");
        final String downloadURl = filepath.getPath();
        filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                //create a new message containing this image
                addImageToProfile(downloadURl);
                mProgress.dismiss();
            }
        });
    }

}

public void addImageToProfile(final String imageLocation){
    final ImageView imageView = (ImageView) findViewById(R.id.imageView);
    mCurrentUserDatabaseReference
            .child("profilePicLocation").setValue(imageLocation).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    StorageReference storageRef = FirebaseStorage.getInstance()
                            .getReference().child(imageLocation);

                    //Picasso.get().load(imageLocation).into(imageView);



                    Glide.with(mView)
                            .using(new FirebaseImageLoader())
                            .load(storageRef)
                            .bitmapTransform(new CropSquareTransformation(mView))
                            .into(imageView);
                }
            }
    );

}

public void openImageSelector(){

    mphotoPickerButton = (ImageButton) findViewById(R.id.imageButton);
    mProgress = new ProgressDialog(this);
    mphotoPickerButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, GALLERY_INTENT);
            //mView = view;
        }
    });
}

private void initializeUserInfo(){
    final ImageView imageView = (ImageView) findViewById(R.id.imageView);
    mCurrentUserDatabaseReference
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    User user = dataSnapshot.getValue(User.class);
                    try{
                        if(user.getProfilePicLocation() != null){
                            StorageReference storageRef = FirebaseStorage.getInstance()
                                    .getReference().child(user.getProfilePicLocation());



                            Glide.with(mView)
                                    .using(new FirebaseImageLoader())
                                    .load(storageRef)
                                    .bitmapTransform(new CropSquareTransformation(mView))
                                    .into(imageView);
                        }
                    }catch (Exception e){
                        Log.e("Error", e.getMessage());
                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
}

private void initializeScreen(){
    mFirebaseAuth = FirebaseAuth.getInstance();
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    currentUserEmail = EmailEncoding.commaEncodePeriod(mFirebaseAuth.getCurrentUser().getEmail());
    mCurrentUserDatabaseReference = mFirebaseDatabase
            .getReference().child(Constants.USERS_LOCATION
                    + "/" + currentUserEmail);
    }
}

共有1个答案

赵刚豪
2023-03-14

尝试调用addImageToProfile(taskSnapshot.downloadURl.toString());在您的On成功监听器和

Glide.with(mView)
       .using(new FirebaseImageLoader())
       .load(imageLocation)
       .bitmapTransform(new CropSquareTransformation(mView))
       .into(imageView);
 类似资料:
  • 我正在开发一个功能,以删除上传的文件。我目前可以删除云Firestore中的引用,但无法将其从存储中删除。下面的代码应该从存储中删除,但它不起作用 错误消息是“没有请求的auth标记。StorageException已发生。对象在位置不存在。HttpResult:404”。我以为这个问题与我的fileUrl字段有关,但我不确定。fileUrl是下载图像的url,例如,如果我将url复制并粘贴到we

  • 我正在开发一个基于Firebase的聊天演示应用程序的Android应用程序。我面临的问题是,当我想传输图像时,我不知道如何处理这种情况。发送图像时,我在Base64中编码,并将其作为字符串发送。那么这里对图像的解码过程又会是怎样的呢?

  • 我有一个问题与我的代码,我必须上传图像到Firebase存储,我需要的图像来自画廊和相机,从画廊的图像是好的,但来自相机的图像给问题,图像加载在ImageView和被发送到数据库是黑色的。有人知道如何解决这个问题吗,或者你知道任何其他加载图像的方法吗? 来自画廊 从相机

  • 问题内容: New Firebase的扩展问题检索数据并将其放在tableView(Swift) 通过将Firebase代码移动到viewDidLoad,Post的所有文本部分都可以显示出来。但是我仍然不能将图像放到tableView中。我已经检查了图像检索,并成功了,我想我从Firebase检索的图像不在发布数组中。 这是我的修复代码: 我的Post结构希望对您有所帮助! 希望能得到一些建议!

  • 我正在尝试从Firebase中检索一个Base64编码的图像,并在Android Studio开发的应用程序上显示它。代码正在ImageView元素上放一些东西,但我认为那只是一个白色图像,因为ImageView元素的背景刚好消失了。有人能帮忙吗?

  • 我正在为Waze开发开源JavaScript插件——著名的免费GPS导航器——专门为在线编辑器开发。这个用户脚本的想法是可以快速选择大的统一颜色的地图区域,将它们转换为地标。 到目前为止,我已经成功地在Photoshop这样的图形编辑器中实现了一个你称之为“魔杖”的工具:用户点击地图上的某个地方(比如,在湖泊或森林上),脚本选择相同颜色覆盖的整个区域,并为地标创建一个多边形。 一切都很好,除了我使