Сохранение изображения в эмуляторе, но не на устройстве

Я использую следующий код для сохранения/загрузки моего изображения

 OnCreate(){
  super.onCreate();
  setContentView(...)
 ....
  setImage();   

  }
 protected void onResume(){
   super.onResume();
   setImage();  
   }


protected void onRestoreInstanceState(Bundle savedInstanceState){
   super.onRestoreInstanceState(savedInstanceState);
   setImage();

}

protected void onPostResume(){
   super.onPostResume();
   setImage();  

}

private void setImage(){
    if(loadPicture(getIntent().getStringExtra("position"),bitmap ) != null){
        Toast.makeText(this, "not null", Toast.LENGTH_SHORT).show();
          imageView.setImageBitmap(loadPicture(getIntent().getStringExtra("position"), bitmap));
    }
}
private void takePicture() {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        File photo = new File(Environment.getExternalStorageDirectory(),
                "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    startActivityForResult(intent, 0);

}

private void savePicture(String filename, Bitmap b, Context ctx){
    try {
           ObjectOutputStream bos;
           FileOutputStream out;// = new FileOutputStream(filename);
           out = ctx.openFileOutput(filename, Context.MODE_WORLD_READABLE);
           bos = new ObjectOutputStream(out);
           b.compress(Bitmap.CompressFormat.PNG, 100, bos);
          if(b.compress(Bitmap.CompressFormat.PNG, 100, bos) == true)
              Toast.makeText(this, "returned true", Toast.LENGTH_LONG).show();

          bos.flush();
        //  bos.close();
          out.close();
    } catch (Exception e) {
           e.printStackTrace();
    }
}
private Bitmap loadPicture(String filename, Bitmap b){
    //Drawable myImage = null;
    try {
        FileInputStream fis = openFileInput(filename);
        ObjectInputStream bis = null;
        try {
            bis = new ObjectInputStream(fis);
        } catch (StreamCorruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        // myImage = Drawable.createFromStream(ois, filename);
         b = BitmapFactory.decodeStream(bis);
        try {
            //bis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    //return myImage;
    return b;

}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case 0:
        if (resultCode == Activity.RESULT_OK) {

            Uri selectedImage = imageUri;
            getContentResolver().notifyChange(selectedImage, null);

            ContentResolver cr = getContentResolver();

            try {
                bitmap = android.provider.MediaStore.Images.Media
                        .getBitmap(cr, selectedImage);

                imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, bitmap.getHeight()/2, bitmap.getWidth()/2, false));
                //previos imageView.setImageBitmap(bitmap)
                savePicture(getIntent().getStringExtra("position"), bitmap,
                        getApplicationContext());

                Toast.makeText(this, selectedImage.toString(),
                        Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
                        .show();



            }

Это отлично работает для сохранения изображения в эмуляторе (то есть образца изображения), но не работает в реальном телефоне. После того, как я делаю снимок и нажимаю значок «ОК» на телефоне, появляется пустой экран примерно на 20 секунд, а затем происходит сбой.


person Kgrover    schedule 30.07.2011    source источник
comment
Можете ли вы вставить стек исключений logcat?   -  person Eugene S    schedule 30.07.2011
comment
Как мне получить стек logcat, так как он отлично работает на эмуляторе... на устройстве, я подозреваю, что это тайм-аут, так как я чувствую, что приложение вылетает после длительного периода времени... что может быть причиной этого? Я думаю, что это как-то связано с тем, как я сохраняю файл   -  person Kgrover    schedule 30.07.2011
comment
Вы можете подключить IDE к устройству с помощью USB-кабеля и включить отладку на устройстве. См. http://developer.android.com/guide/developing/device.html   -  person Justin Shield    schedule 30.07.2011
comment
поэтому проблема была приостановлена ​​(исключение OutOfMemoryError). Я подтвердил, что файл изображения слишком велик, сделав снимок с разрешением 1, а не 5 мегапикселей. Как мне исправить это и разрешить пользователю делать снимки даже в высоком разрешении? @Justin, не могли бы вы опубликовать пример кода?   -  person Kgrover    schedule 30.07.2011


Ответы (1)


Вы должны попробовать некоторые из решений, представленных здесь

person Justin Shield    schedule 30.07.2011
comment
Извините, что не информирую вас, но я решил эту проблему ранее, используя ту же ссылку, которую вы мне предоставили. Отличный ответ, так как это было решением моей проблемы! - person Kgrover; 01.08.2011