如果用户没有选择要上传的文件,我怎么能验证插入按钮?

时间:2018-04-08 18:04:09

标签: android firebase firebase-storage

我正在开发一个活动,允许用户将图像上传到firebase存储,并且它可以正常工作。但是,我想在用户没有选择要上传的文件时验证用户输入,我发了一个Toast消息但是当我单击按钮而没有选择文件时,应用程序停止并在logcat中显示此错误(参见图片)

the error

知道错误的人吗? 这是我上传文件的方法

  mButtonUpload.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
            UploadFile();
       }
   });

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

@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){
        mImageUri=data.getData();
        Picasso.with(this).load(mImageUri).into(mImageView);
       // mImageView.setImageURI(mImageUri);
    }
}
private String getFileExtension(Uri uri){
    ContentResolver CR=getContentResolver();
    MimeTypeMap mime=MimeTypeMap.getSingleton();
    return mime.getExtensionFromMimeType(CR.getType(uri));
}
private void UploadFile(){
   if(mImageView !=null){
    StorageReference fileRefrence= mStorageref.child(System.currentTimeMillis()
            +"."+ getFileExtension(mImageUri));
    fileRefrence.putFile(mImageUri)
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                          mProgressBar.setProgress(0);
                        }
                    },3000);
                    Toast.makeText(MainActivity.this,"Upload Successfull ",Toast.LENGTH_SHORT).show();
                    Upload upload = new Upload(mEdittxtfilename.getText().toString().trim(),
                            taskSnapshot.getDownloadUrl().toString(),Title.getText().toString().trim(),Content.getText().toString().trim(),edittxtDate.getText().toString().trim(),edittxtTime.getText().toString().trim()
                            ,edittxtExpDate.getText().toString().trim(),edittxtexptime.getText().toString().trim(),location.getSelectedItem().toString(),typeof.getSelectedItem().toString(),status.getText().toString().trim());
                    String uploadid= mDatabaseref.push().getKey();
                    mDatabaseref.child(uploadid).setValue(upload);

                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(MainActivity.this,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());
                    mProgressBar.setProgress((int)progress);
                }
            });
   }else  if(mImageView==null){

       Toast.makeText(getApplicationContext(),"No file Selected", Toast.LENGTH_LONG).show();
   }
}

4 个答案:

答案 0 :(得分:2)

如果未选择图像,则mImageUri将为null,然后在上传之前检查是否为空。

替换

  

if(mImageView!= null){

使用:

  

if(mImageUri!= null){

希望它有效。

答案 1 :(得分:1)

如果未选择图像,则从拾取器中选择,因此您的mImageUri将为null。

在继续将图像上传到firebase之前检查其空值。

答案 2 :(得分:0)

如果未挑选图像,则Uri应为null。

答案 3 :(得分:0)

此崩溃即将到来,因为在调用 getFileExtension(Uri uri)方法时,您传递的参数uri为null。

为达到您的目的,您需要检查 imageuri == null 而不是 if(mImageView == null)