有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAlang.NullPointerException:com上的uri。安卓内部的util。先决条件。checkNotNull

我在查询提交表单中使用多部分上传进行图像上传,在我的情况下,图像上传是可选的,所以当我不使用图像时,它会抛出空指针,所以我需要它是可选的

 public String getPath(Uri uri) {
        Cursor cursor = AskQueryActivity.this.getContentResolver().query(uri, null, null, null, null); // this line throws error
        assert cursor != null;
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
        cursor.close();

        cursor = AskQueryActivity.this.getContentResolver().query(
                安卓.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
        assert cursor != null;
        cursor.moveToFirst();
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();

        return path;
    }

错误日志

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.admin.lorem.ipsum, PID: 3818
                  java.lang.NullPointerException: uri
                      at com.安卓.internal.util.Preconditions.checkNotNull(Preconditions.java:60)
                      at 安卓.content.ContentResolver.query(ContentResolver.java:474)
                      at 安卓.content.ContentResolver.query(ContentResolver.java:434)

共 (2) 个答案

  1. # 1 楼答案

    由于@albert_nil state here检查URI不应为空以执行Cursor query,如果URI仍然返回null,则通过Toast or log如下方式处理

     public String getPath(Uri uri) {
      if(uri != null){
        Cursor cursor = AskQueryActivity.this.getContentResolver().query(uri, null, null, null, null); // this line throws error
        assert cursor != null;
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
        cursor.close();
    
        cursor = AskQueryActivity.this.getContentResolver().query(
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
        assert cursor != null;
        cursor.moveToFirst();
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();
    
        return path;
      } else{
         //do log/toast to user
         return "";
      }
    }
    
  2. # 2 楼答案

    Intent intentt = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intentt.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION & Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    

    只需将此添加到intent或ActivityResult中即可

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        if(resultCode != RESULT_CANCELED){
            if (requestCode == CAMERA_REQUEST) {  
                Bitmap photo = (Bitmap) data.getExtras().get("data"); 
                imageView.setImageBitmap(photo);
            }
        }
    }