我正在开发一个活动,允许用户将图像上传到firebase存储,并且它可以正常工作。但是,我想在用户没有选择要上传的文件时验证用户输入,我发了一个Toast消息但是当我单击按钮而没有选择文件时,应用程序停止并在logcat中显示此错误(参见图片)
知道错误的人吗? 这是我上传文件的方法
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();
}
}
答案 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)