【问题标题】:taskSnaphot.getDownloadUrl() is not working. What to do for this?taskSnaphot.getDownloadUrl() 不工作。为此该怎么办?
【发布时间】:2020-10-15 15:17:50
【问题描述】:

我正在将图像上传到 FirebaseStorage,我已经编写了此代码,但 tasksnapshot.getDownloadUrl() 不起作用。为此该怎么办? 请告诉,这将是很大的帮助。

我的代码是:

public void UploadImageFileToFirebaseStorage() {

    if (FilePathUri != null) {
        progressDialog.setTitle("Image is Uploading...");
        progressDialog.show();
        StorageReference storageReference2nd = storageReference.child(Storage_Path + System.currentTimeMillis() + "." + GetFileExtension(FilePathUri));
        storageReference2nd.putFile(FilePathUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        String TempImageName = ImageName.getText().toString().trim();
                        progressDialog.dismiss();
                        Toast.makeText(getApplicationContext(), "Image Uploaded Successfully ", Toast.LENGTH_LONG).show();

                        @SuppressWarnings("VisibleForTests")
                        ImageUploadInfo imageUploadInfo = new ImageUploadInfo(TempImageName, taskSnapshot.getDownloadUrl().toString());
                        String ImageUploadId = databaseReference.push().getKey();
                        databaseReference.child(ImageUploadId).setValue(imageUploadInfo);
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        progressDialog.dismiss();
                        Toast.makeText(AddBanner.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        progressDialog.setTitle("Image is Uploading...");

                    }
                });
    }
    else {

        Toast.makeText(AddBanner.this, "Please Select Image or Add Image Name", Toast.LENGTH_LONG).show();

    }
}

请解决我的问题。

【问题讨论】:

    标签: java android xml firebase firebase-realtime-database


    【解决方案1】:

    //定义变量。

    private Uri filePath;
    private final int PICK_IMAGE_REQUEST = 71;
    

    //火力基地

    FirebaseStorage storage;
    StorageReference storageReference;
    

    //在onCreate方法中。

     public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.content_main);
    
            storage = FirebaseStorage.getInstance();
            storageReference = storage.getReference();
    
        }
    

    首先检查您是否从图库中选择了一张图片。 选择图像的方法。

    private void chooseImage() {
      Intent intent = new Intent();
      intent.setType("image/*");
      intent.setAction(Intent.ACTION_GET_CONTENT);
      startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
    }
    

    //onActivityResult方法获取图片uri。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
              && data != null && data.getData() != null )
      {
        filePath = data.getData();
        try {
          Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
          imageView.setImageBitmap(bitmap);
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
      }
    }
    

    //上传图片方法。

    private void uploadImage() 
    { 
      if(filePath != null)
      {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();
     
        StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
        ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                  @Override
                  public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    progressDialog.dismiss();
                    Toast.makeText(MainActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
                  }
                })
                .addOnFailureListener(new OnFailureListener() {
                  @Override
                  public void onFailure(@NonNull Exception e) {
                    progressDialog.dismiss();
                    Toast.makeText(MainActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
                  }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                  @Override
                  public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                    double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
                            .getTotalByteCount());
                    progressDialog.setMessage("Uploaded "+(int)progress+"%");
                  }
                });
      }
    }
    

    //一定要定义那些权限。在安卓中

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    您应该首先调用choose chooseImage 方法,然后调用uploadImage 方法将图像作为这些代码上传

    然后告诉我你下载的错误。

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2011-06-28
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2022-11-25
      相关资源
      最近更新 更多