2016-06-21 4 views
4

У меня возникла проблема с startActivityForResult/onActivityResult, где данные возвращают значение null. Я использую startActivityForResult (камера) и могу сохранить изображение в устройстве.Android startActivityForResult возвращает null в onActivityResult при использовании камеры

Это часть в деятельности, которая вызывает камеру

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.upload_new_tire); 
    setUpWings(); 

    imageButton.setOnClickListener(new MyCamera(this)); 
} 

Это моя onActivityResult функция

protected void onActivityResult(int requestCode,int resultCode, Intent data){ 
    Log.i("request, result Code", String.valueOf(requestCode) + " and " + String.valueOf(resultCode)); 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && data != null){ 
     Bundle extras = data.getExtras(); 
     Bitmap imageBitmap = (Bitmap)extras.get("data"); 
     imageButton.setImageBitmap(imageBitmap); 
    } 
} 

Это где я называю startActivityForResult и сохранить изображение в файл.

Uri photoURI = FileProvider.getUriForFile(mContext, 
        "autosoftpro.reusedtire.fileprovider", 
        photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      mContext.startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

Это сообщение об ошибке, это происходит потому, что «Intent data» имеет значение NULL. Я попытался взглянуть на другие сообщения, похожие, но не сумел выяснить причину.

java.lang.RuntimeException: Failure delivering result 
ResultInfo{who=null, request=1, result=-1, data=null} to activity {autosoftpro.reusedtire/autosoftpro.reusedtire.UploadTireActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference 
+0

Вы используете разные коды запросов. 'REQUEST_IMAGE_CAPTURE' в вашем onActivityResult, но' REQUEST_TAKE_PHOTO' в вашем запросе. При этом вам следует попытаться добавить 'if (resultCode! = RESULT_CANCELED)' сначала, чтобы убедиться, что у вас есть действительный ответ для работы. Вам также не нужен ваш супер-вызов, если у вас нет явной причины. – zgc7009

+0

Благодарим за отзыв. Они фактически равны 1, и они вошли в цикл условий, если я не включаю данные условия! = Null –

+0

Таким образом, ваши данные на самом деле являются нулевыми (это видно из выведенной ошибки). Единственный раз, когда это произойдет, - если вы отмените свой запрос (который можно поймать с помощью проверки 'if (resultCode! = RESULT_CANCELED)'. – zgc7009

ответ

2

это происходит потому, что 'Намерение данных' является нулевым

Как объясняется в the documentation for ACTION_IMAGE_CAPTURE, есть две возможности:

  • Вы включают в ACTION_IMAGE_CAPTUREIntentEXTRA_OUTPUT. В этом случае вам ничего не возвращается в Intent, доставленном до onActivityResult(), но вы уже знаете, где должно быть изображение.

  • Вы не включаете EXTRA_OUTPUT, и в этом случае data дополнительно будет миниатюром `Растровое изображение.

Вы в том числе EXTRA_OUTPUT, что означает, что вы не должны быть проверяя data дополнительно. Вместо этого найдите изображение везде, где вы указали в EXTRA_OUTPUT.

+0

Пропустил эту часть до моего комментария, на 100% правильно. Он явно объявил URI в вызове, просто используйте его: P – zgc7009

Смежные вопросы