2013-07-16 3 views
0

У меня есть механизм, над которым я все еще работаю, я пытаюсь переварить код, и у меня есть то, что у меня есть из разных источников. В основном есть ImageView, где вы можете настроить свой профиль, вы можете либо сделать снимок с помощью камеры, либо выбрать картинку из галереи. У меня есть следующее:Случайная авария на Android при загрузке изображений?

public void selectPhoto(View view) { 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, CHOOSE_PHOTO); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
     case CHOOSE_PHOTO: 
      Uri selectedImage = data.getData(); 
      InputStream imageStream = null; 
      try { 
       imageStream = getContentResolver().openInputStream(selectedImage); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
      ((ImageView) findViewById(R.id.selImageView)).setImageBitmap(yourSelectedImage); 
      break; 
    } 
} 

EDIT: Я сузил источник своей ошибки вышеприведенного кода. Сбой происходит, когда пользователь предлагает выбрать фотографию из Галереи, но затем нажимает назад вместо выбора фотографии и пытается вернуться в приложение. Любые идеи почему?

+1

вы должны попытаться проверить LogCat, а затем разместить журнал здесь, чтобы люди могли помочь вам отлаживать более эффективно! =] –

ответ

1

В вашем onActivityResult вы не проверяете resultCode, чтобы узнать, был ли результат отменен или нет. Затем вы продолжаете, как только изображение передается. Скорее всего, потому что resultCode укажет на отмену вашей выбранной переменной Image равным null, а openInputStream не любит открывать поток.

Кроме того, после исключения вы затем передаете null imageStream методу decodeStream.

Try что-то вроде:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case CHOOSE_PHOTO: 
     if (resultCode = Activity.RESULT_OK) { 
      Uri selectedImage = data.getData(); 
      InputStream imageStream = null; 
      try { 
       imageStream = getContentResolver().openInputStream(selectedImage); 
       Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
       ((ImageView) findViewById(R.id.selImageView)).setImageBitmap(yourSelectedImage); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      // handle cancelation 
     } 
     break; 
    } 
} 
+0

Да, я использовал подобное решение, это работает. У меня есть продолжение; если я использую параметр CHOOSE_PHOTO и выбираю фотографию, это работает. Если я снова выберем CHOOSE_PHOTO и выберите другую фотографию, приложение выйдет из строя; любая идея почему? – mike