首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要在我的活动中得到java.lang.NullpointerExcetion: uriString?

问为什么我要在我的活动中得到java.lang.NullpointerExcetion: uriString?
EN

Stack Overflow用户
提问于 2022-08-10 04:56:53
回答 1查看 47关注 0票数 1

嘿,我在filepath =Uri.parse(路径)处得到了一个错误“uriString: uriString”;位于onCreate内部。我试图将图像上传到firebase,为此我需要filepath,我做错了什么?,我在uploadImage()中使用了filepath作为图像的路径,在此活动中显示了来自数组的选定图像,我希望将选定的图像上传到防火墙,请参见代码:

代码语言:javascript
复制
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 + "%");
                            }
                        });
    }
}

}

EN

回答 1

Stack Overflow用户

发布于 2022-08-10 07:00:34

你的代码说:

代码语言:javascript
复制
String path = null;
filepath = Uri.parse(path);

你会问为什么Uri.parse(path)会抛出一个NullPointerException。

答:因为path是null。

为什么?

答:因为您在前面的行中为它分配了null!

怎么修呢?

答:不要这样做。相反,从某个地方获取路径的非空值。

不幸的是,您的代码中没有足够的线索来确定它将从哪里获得值,因此恐怕您必须自己解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73300803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档