【发布时间】:2021-08-20 17:27:40
【问题描述】:
我正在尝试用相机拍照并将其上传到 Firebase。我正在使用 AlertDialog 询问用户是否要使用相机或从图库中选择图像。我可以用相机拍照,但是当我尝试上传图片时,却显示找不到图片。
这是我的图片选择方法:
private void imageSelect(Context context) {
final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose Image");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (options[item].equals("Take Photo")) {
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);
} else if (options[item].equals("Choose from Gallery")) {
Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto , 1);
} else if (options[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK){
filePath = data.getData();
}
break;
case 1:
if(resultCode == RESULT_OK){
filePath = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
}
catch (IOException e)
{
e.printStackTrace();
}
}
break;
}
}
这是我上传图片的方法:
private void uploadImage() {
if (filePath != null) {
//Code for showing progressDialog while uploading
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Uploading...");
progressDialog.show();
StorageReference ref = storageReference.child("images/" + name);
//Adding listeners on upload or failure of image
ref.putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//Image uploaded successfully
progressDialog.dismiss();
Toast.makeText(add_property.this, "Image Uploaded!", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//Error, Image not uploaded
progressDialog.dismiss();
Toast.makeText(add_property.this, "Failed " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
//Progress Listener for loading
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
progressDialog.setMessage("Uploaded " + (int) progress + "%");
}
});
}
else {
Toast.makeText(getApplicationContext(),"No image found",Toast.LENGTH_SHORT).show();
}
}
提前感谢任何帮助的朋友。
【问题讨论】:
-
这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗?
-
@AlexMamo 当调用 uploadImage 方法时,它说没有找到图像。我假设它与 URI 设置不正确有关。
-
这表示
filePath为空,对吧? -
@AlexMamo 是的,似乎是这样......我不明白为什么 filePath 为空
-
您应该尝试调试您的应用程序,看看为什么该 filePath 的值为 null。
标签: java android firebase file-upload firebase-storage