Bild in ImageView gelöscht nach Handydrehung

  • Antworten:5
Fränk R.
  • Forum-Beiträge: 9

29.06.2014, 11:57:00 via Website

Moin,
in meiner App kann man ein Bild von Galeri oder Cam nehmen und in ein Imageview anzeigen lassen.
Nachdem man das Handy jedoch dreht, ist das Bild leider weg.
Habe jetzt etliche lösungen Probiert aber mir crasht entweder die App oder das Bild wird trotzdem gelöscht.
Hier ein ausschnitt wie ich es jetzt gemacht habe.
Das bild ist nach drehung leider immer noch weg.

ImageView viewImage;
Bitmap bitmap;

In onCreate:

if (savedInstanceState != null) {

        bitmap = savedInstanceState.getParcelable("bitmap");
       viewImage.setImageBitmap(bitmap);
    }

In die Class:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelable("bitmap", bitmap);
}

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == 1) {
                File f = new File(Environment.getExternalStorageDirectory().toString());
                for (File temp : f.listFiles()) {
                    if (temp.getName().equals("temp.jpg")) {
                        f = temp;
                        break;
                    }
                }
                try {
                    Bitmap bitmap;
                    BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();

                    bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
                            bitmapOptions);


                    if(bitmap!=null)
                                                {   

                                                 int photo_width = bitmap.getWidth();
                                                 int photo_height = bitmap.getHeight();
                       //1dp = 1.5 px 150dp = 225px 

                                                if(photo_width >230)
                                                    photo_width = 230;

                                               if(photo_height > 140)
                                                    photo_height = 140;

                                               bitmap = Bitmap.createScaledBitmap (bitmap, photo_width , photo_height , false);
                                                 }

                    viewImage.setImageBitmap(bitmap);

                    String path = android.os.Environment
                            .getExternalStorageDirectory()
                            + File.separator
                            + "Phoenix" + File.separator + "default";
                    f.delete();
                    OutputStream outFile = null;
                    File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                    try {
                        outFile = new FileOutputStream(file);
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
                        outFile.flush();
                        outFile.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (requestCode == 2) {


                Uri selectedImage = data.getData();
                String[] filePath = { MediaStore.Images.Media.DATA };
                Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
                c.moveToFirst();
                int columnIndex = c.getColumnIndex(filePath[0]);
                String picturePath = c.getString(columnIndex);
                c.close();
                Bitmap bitmap = (BitmapFactory.decodeFile(picturePath));
                Log.w("path of image from gallery......******************.........", picturePath+"");

                if(bitmap!=null)
                {   

                 int photo_width = bitmap.getWidth();
                 int photo_height = bitmap.getHeight();

//1dp = 1.5 px 150dp = 225px

                if(photo_width >230)
                    photo_width = 230;

               if(photo_height > 140)
                    photo_height = 140;

               bitmap = Bitmap.createScaledBitmap (bitmap, photo_width , photo_height , false);
                 }

                viewImage.setImageBitmap(bitmap);
            }
        }
        }

Was mache ich falsch?
Ich gebe bitmap eine feste Auflösung vom Bild und übergebe es dann in ImageView.
Mit outState.putParcelable("bitmap", bitmap); sichere ich mir mein bitmap aus ImageView und gebe es nach Handydrehung über if savedinstancestate != nuill wieder aus.

Liebe Grüße!

Antworten
Andreas S.
  • Forum-Beiträge: 76

29.06.2014, 20:36:30 via App

wenn ich das richtig sehe, dann deklarierst du in onActivityResult die Variable bitmap. Dadurch wird nicht der klassenvariable das Bild zugewiesen.

Antworten
DroidGeek
  • Forum-Beiträge: 17

29.06.2014, 21:42:39 via Website

ich hab kaum erfahrung mit deinem problem, vielleicht hätte ich etwas über das es sich lohnt nachzudenken. Beim wechseln zwischen landscape- und portrait-mode (= bildschirm drehen) wird die aktuell aktive Activity nochmal neu geladen, im Klartext die onCreate()-Methode nochmals aufgerufen.

Hoffe es hilft weiter.

LG

— geändert am 29.06.2014, 21:44:59

Antworten
Fränk R.
  • Forum-Beiträge: 9

29.06.2014, 22:39:09 via Website

Das weiß ich ja auch das die Activity neu geladen wird.
Aber das hilft mir leider bei meinem Problem nicht weiter :/

Antworten
Andreas S.
  • Forum-Beiträge: 76

29.06.2014, 22:49:51 via App

wie schon geschrieben von mir liegt es wohl daran dass mit der variablendeklaration von bitmap in onActivityResult die klassenvariable bitmap nicht gesetzt wird

— geändert am 29.06.2014, 22:50:45

Antworten
Fränk R.
  • Forum-Beiträge: 9

30.06.2014, 13:24:25 via Website

Achso habs erst falsch verstanden wie es scheint... oder war gestern schon zu viel für mich.
Wie setze ich denn die klassenvariable damit bitmap übernommen wird?

Antworten