Java 无法从firebase存储中提取文件

Java 无法从firebase存储中提取文件,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我无法从firebase存储中获取上传的图像文件,因为数据库将url存储在一个公共的不可使用的url表单中,而且我似乎一辈子都不知道我的代码有什么问题。请帮忙 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if

我无法从firebase存储中获取上传的图像文件,因为数据库将url存储在一个公共的不可使用的url表单中,而且我似乎一辈子都不知道我的代码有什么问题。请帮忙

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

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

        Uri imageUri = data.getData();

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

        //Toast.makeText(SettingsActivity.this, imageUri, Toast.LENGTH_LONG).show();

    }

    if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){

        CropImage.ActivityResult result = CropImage.getActivityResult(data);

        if(resultCode == RESULT_OK){

            mProgressDialog = new ProgressDialog(SettingsActivity.this);
            mProgressDialog.setTitle("Uploading");
            mProgressDialog.setMessage("Please Wait While The Image Is Being Uploaded");
            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 + ".jpg");
            filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    if(task.isSuccessful()){

                        final String download_url = task.getResult().getMetadata().getReference().getDownloadUrl().toString();
                        mUserDatabase.child("image").setValue(download_url).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                if(task.isSuccessful()){

                                    mProgressDialog.dismiss();
                                    Toast.makeText(SettingsActivity.this, "Uploaded Successfully", Toast.LENGTH_LONG).show();

                                }

                            }
                        });

                    } else {

                        Toast.makeText(SettingsActivity.this, "Error", Toast.LENGTH_LONG).show();
                        mProgressDialog.dismiss();

                    }

                }
            });

        } else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){

            Exception error = result.getError();

        }

    }

}
@覆盖
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==GALLERY\u PICK&&resultCode==RESULT\u OK){
Uri imageUri=data.getData();
CropImage.activity(imageUri)
.setAspectRatio(1,1)
.启动(本);
//Toast.makeText(SettingsActivity.this、imageUri、Toast.LENGTH_LONG.show();
}
if(requestCode==CropImage.CROP\u IMAGE\u ACTIVITY\u REQUEST\u CODE){
CropImage.ActivityResult结果=CropImage.getActivityResult(数据);
if(resultCode==RESULT\u OK){
mProgressDialog=新建进度对话框(设置活动。this);
mProgressDialog.setTitle(“上传”);
mProgressDialog.setMessage(“正在上载图像,请稍候”);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
Uri resultUri=result.getUri();
字符串current_user_id=mCurrentUser.getUid();
StorageReference filepath=mImageStorage.child(“profile_images”).child(当前_用户_id+“.jpg”);
filepath.putFile(resultUri).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
最后一个字符串download_url=task.getResult().getMetadata().getReference().getDownloadUrl().toString();
mUserDatabase.child(“image”).setValue(下载url).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
mProgressDialog.disclose();
Toast.makeText(SettingsActivity.this,“上载成功”,Toast.LENGTH_LONG.show();
}
}
});
}否则{
Toast.makeText(SettingsActivity.this,“Error”,Toast.LENGTH_LONG.show();
mProgressDialog.disclose();
}
}
});
}else if(resultCode==CropImage.CROP\u IMAGE\u ACTIVITY\u RESULT\u ERROR\u CODE){
异常错误=result.getError();
}
}
}

在过去的5天里,我一直在关注这个问题,非常感谢您的帮助。首先,您可以在位图流中转换您的图像,然后您可以将其上载到firebase存储中,还可以轻松获得可下载的链接。您可以执行以下类似操作:

StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + ".jpg");

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,40,baos);
byte[] byt = baos.toByteArray();

UploadTask uploadTask = filepath.putBytes(byt);

 uploadTask.addOnFailureListener(new OnFailureListener() {

                        @Override
                        public void onFailure(@NonNull Exception e) {

                            TastyToast.makeText(getApplicationContext(),"Error:"+e.getMessage(),TastyToast.LENGTH_LONG,
                                     TastyToast.ERROR).show();

                        }
                    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            if(taskSnapshot.getMetadata() != null){

                                Task<Uri> result = taskSnapshot.getStorage().getDownloadUrl();

                                result.addOnSuccessListener(new OnSuccessListener<Uri>() {

                                    @Override
                                    public void onSuccess(Uri uri) {

                                         downloadUrl = Uri.parse(uri.toString());

                                       // In downloadUri variable you will get your 
                                           image downloadable link
                                    }
                                });
                            }

                        }
                    }); 
StorageReference filepath=mImageStorage.child(“profile_images”).child(当前_用户_id+”.jpg);
位图Bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
压缩(bitmap.CompressFormat.JPEG,40,baos);
byte[]byt=bas.toByteArray();
UploadTask UploadTask=filepath.putBytes(byt);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
TastyToast.makeText(getApplicationContext(),“错误:+e.getMessage(),TastyToast.LENGTH_LONG,
TastyToast.ERROR).show();
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
如果(taskSnapshot.getMetadata()!=null){
任务结果=taskSnapshot.getStorage().getDownloadUrl();
result.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(Uri){
downloadUrl=Uri.parse(Uri.toString());
//在downloadUri变量中,您将获得
图像下载链接
}
});
}
}
}); 

谢谢

谢谢您的回复。我会让你知道它是否有效。你介意在我的github上检查整个代码吗?我还是很难弄清楚,抱歉。好了。上面代码中的java文件是SettingsActivity.java您遇到了什么错误,您是否尝试过我的代码。主要错误是url在数据库中的存储方式,因此当我尝试获取它时,它无法执行此操作。图像url以com.google.android.gms.tasks的形式存储在数据库中。zzu@e4bfb58. 只要url是以这种形式存储的,我就不可能获取它。我需要将其存储在firebase存储中上载的图像的实际下载url的起始位置