嘿,我在filepath =Uri.parse(路径)处得到了一个错误“uriString: uriString”;位于onCreate内部。我试图将图像上传到firebase,为此我需要filepath,我做错了什么?,我在uploadImage()中使用了filepath作为图像的路径,在此活动中显示了来自数组的选定图像,我希望将选定的图像上传到防火墙,请参见代码:
private Uri filepath;
FirebaseStorage storage;
StorageReference storageReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_viewer);
String path = null;
filepath = Uri.parse(path);
ImageView imageView = findViewById(R.id.imageView);
storage = FirebaseStorage.getInstance();
storageReference = storage.getReference();
Intent intent = getIntent();
if (intent != null) {
Glide.with(ImageViewerActivity.this).load(intent.getStringExtra("image")).placeholder(R.drawable.ic_baseline_broken_image_24).into(imageView);
path = intent.getStringExtra("image");
}
ImageButton uploadClicks = findViewById(R.id.UploadClicks);
uploadClicks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uploadImage();
}
});
ImageButton share = findViewById(R.id.shareImage);
String finalPath = path;
share.setOnClickListener(v -> new ShareCompat.IntentBuilder(ImageViewerActivity.this).setStream(Uri.parse(finalPath)).setType("image/*").setChooserTitle("Share Image").startChooser());
ImageButton delete = findViewById(R.id.deleteImage);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MaterialAlertDialogBuilder alertDialogBuilder = new MaterialAlertDialogBuilder(ImageViewerActivity.this);
alertDialogBuilder.setMessage("Are you sure you want to delete this image ?");
alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String[] projection = new String[]{MediaStore.Images.Media._ID};
String selection = MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = new String[]{new File(finalPath).getAbsolutePath()};
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(queryUri, projection, selection, selectionArgs, null);
if (cursor.moveToFirst()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
try {
contentResolver.delete(deleteUri, null, null);
boolean delete1 = new File(finalPath).delete();
Log.e("TAG", delete1 + "");
Toast.makeText(ImageViewerActivity.this, "Deleted Successfully", Toast.LENGTH_SHORT).show();
finish();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(ImageViewerActivity.this, "Error Deleting Video", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(ImageViewerActivity.this, "File Not Find", Toast.LENGTH_SHORT).show();
}
cursor.close();
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialogBuilder.show();
}
});
}
private void uploadImage()
{
if (filepath != null) {
// Code for showing progressDialog while uploading
ProgressDialog progressDialog
= new ProgressDialog(this);
progressDialog.setTitle("Uploading...");
progressDialog.show();
// Defining the child of storageReference
StorageReference ref
= storageReference
.child(
"images/"
+ UUID.randomUUID().toString());
// 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
// Dismiss dialog
progressDialog.dismiss();
Toast
.makeText(ImageViewerActivity.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(ImageViewerActivity.this,
"Failed " + e.getMessage(),
Toast.LENGTH_SHORT)
.show();
}
})
.addOnProgressListener(
new OnProgressListener<UploadTask.TaskSnapshot>() {
// Progress Listener for loading
// percentage on the dialog box
@Override
public void onProgress(
UploadTask.TaskSnapshot taskSnapshot)
{
double progress
= (100.0
* taskSnapshot.getBytesTransferred()
/ taskSnapshot.getTotalByteCount());
progressDialog.setMessage(
"Uploaded "
+ (int)progress + "%");
}
});
}
}}
发布于 2022-08-10 07:00:34
你的代码说:
String path = null;
filepath = Uri.parse(path);你会问为什么Uri.parse(path)会抛出一个NullPointerException。
答:因为path是null。
为什么?
答:因为您在前面的行中为它分配了null!
怎么修呢?
答:不要这样做。相反,从某个地方获取路径的非空值。
不幸的是,您的代码中没有足够的线索来确定它将从哪里获得值,因此恐怕您必须自己解决这个问题。
https://stackoverflow.com/questions/73300803
复制相似问题