0

I'm using the following code from another post to enable file handling within a HTML form input (file upload). It currently works perfectly with the camera and uploading from storage, however if I click on the file input, then not select an application or click back I receive the following message

Attempt to invoke virtual method 'android.content.ClipData android.content.Intent.getClipData()' on a null object reference

I think this has something to do with the file chooser expecting data but I am returning a null object as there is no image to upload via html form but don't know how to fix it. I tried the method here (Cancel a file upload in a Webview) but no luck. I get a complete Android crash using the emulator using; if (resultCode != RESULT_OK) etc which I think is on the right path.

Method in full;

   public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode != INPUT_FILE_REQUEST_CODE || mUploadMessage == null) {
            super.onActivityResult(requestCode, resultCode, data);
            return;
        }
        try {
            String file_path = mCameraPhotoPath.replace("file:","");
            File file = new File(file_path);
            size = file.length();

        }catch (Exception e){
            Log.e("Error!", "Error while opening image file" + e.getLocalizedMessage());
        }

        if (data != null || mCameraPhotoPath != null) {
            Integer count = 1;
            ClipData images = null;
            try {
                images = data.getClipData();
            }catch (Exception e) {
                Log.e("Error!", e.getLocalizedMessage());
            }

            if (images == null && data != null && data.getDataString() != null) {
                count = data.getDataString().length();
            } else if (images != null) {
                count = images.getItemCount();
            }
            Uri[] results = new Uri[count];
            // Check that the response is a good one
            if (resultCode == Activity.RESULT_OK) {
                if (size != 0) {
                    // If there is not data, then we may have taken a photo
                    if (mCameraPhotoPath != null) {
                        results = new Uri[]{Uri.parse(mCameraPhotoPath)};
                    }
                } else if (data.getClipData() == null) {
                    results = new Uri[]{Uri.parse(data.getDataString())};
                } else {

                    for (int i = 0; i < images.getItemCount(); i++) {
                        results[i] = images.getItemAt(i).getUri();
                    }
                }
            }
            mUploadMessage.onReceiveValue(results);
            mUploadMessage = null;
        }
   }

I am using SDK 22, tools 25.0.0, minsdk 21, target 22.

I'm still learning Java so any heads up or examples to fix my issue would be greatly appreciated.

Thanks

zeekhuge
  • 1,594
  • 1
  • 13
  • 23
Story Teller
  • 417
  • 1
  • 4
  • 14

1 Answers1

2

My guess is that the "data" object is NULL when you call getClipData() method on it