2016-05-31 2 views
2

В моем приложении я хочу щелкнуть фотографию с камеры и хочу получить контент URI из результата камеры onActivityResult().Camera Intent call onDestroy()

В моем приложении я получаю URL-адрес контента, используя метод ниже.

Uri currImageURI; 
ArrayList<Uri> imageItems = new ArrayList<Uri>(); 
    @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      // TODO Auto-generated method stub 
      if((requestCode == SELECT_PICTURE_FROM_CAMERA && resultCode == RESULT_OK) || (requestCode == SELECT_PICTURE_FROM_LIB && resultCode == RESULT_OK)) { 
       currImageURI = data.getData(); 
       imageItems.add(currImageURI); 
       Toast.makeText(UpdateMyServiceActivity.this, "Image added.", Toast.LENGTH_LONG).show(); 
      } 
     } 

Я добавил в URI ArrayList (Поскольку пользователь может загрузить несколько изображений).

В моем приложении есть кнопка «Сохранить».

Когда пользователь нажимает кнопку «Сохранить», я передаю imageItems на номер AsyncTask для загрузки изображения на сервер.

Но вот проблема.

Когда пользователь нажимает кнопку «Сохранить», я получаю imageItems null.

Я отлаживаю свое приложение. После добавления URI в ArrayList вызывается методы Activity.

onResume() 
onPause() 
onStop() 
onDestroy() 
onCreate() 
onStart() 
onResume() 

Именно поэтому я получаю массивList null.

Как решить эту проблему?

ответ

2
currImageURI = data.getData(); 

Если вы используете ACTION_IMAGE_CAPTURE, это неправильный код. ACTION_IMAGE_CAPTURE не возвращает Uri, хотя небольшое количество приложений для камеры будет. Вместо этого вы отправляете EXTRA_OUTPUT на ACTION_IMAGE_CAPTUREIntent. Затем вы держите за любое значение, которое вы использовали с EXTRA_OUTPUT, и смотрите там для своего изображения в onActivityResult().

Вот почему я получаю массивList null.

Ваша деятельность разрушается и воссоздается, возможно, потому, что ваш процесс был прерван, когда приложение камеры находилось на переднем плане. Это совершенно нормально. Ваш процесс может быть прерван в любое время, когда ваше приложение не находится на переднем плане.

Как решить эту проблему?

Держась на ArrayList через сохраненное состояние экземпляра Bundle.

+0

Каждый раз, когда я получаю URI от намерения камеры. Пример URI: 'content: // media/external/images/media/8484' –

+0

@ChiragSavsani: вы не получите один из устройств Nexus. И если вы прочтете документацию, 'ACTION_IMAGE_CAPTURE' не документируется, чтобы вернуть' Uri'. Не требуется, чтобы приложение камеры возвращало 'Uri'. – CommonsWare

+0

Ох. Большое спасибо за указание на эту тему. Теперь я должен изменить свой код. Большое спасибо за информацию. –

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