Comment garder une image dans un Android de l'activité lors d'un changement d'orientation?

Je suis très nouveau pour Android programmation et ont fait des expériences avec la création d'une application. Dans mon application j'ai l'utilisateur d'appuyer sur un bouton qui permet de choisir une application sur leur appareil, telles que la "Galerie" pour sélectionner une image. Cette image est alors affichée dans une imageview fenêtre sur l'écran de l'activité. Malheureusement, lorsque j'allume mon téléphone et les changements d'orientation, l'image est perdue et qu'ils doivent aller le sélectionner à nouveau.

Comment puis-je enregistrer l'image bitmap et qu'il re-affiche après le changement d'orientation?

Voici le code de la fonction que j'utilise pour permettre à l'utilisateur de choisir une image app, choisissez une image et afficher l'image dans l'imageview fenêtre.

@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK){
        Uri targetUri = data.getData();
        textTargetUri.setText(targetUri.toString());
        Bitmap bitmap;
        try {
            bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
            targetImage.setImageBitmap(bitmap);
        } 
        catch (FileNotFoundException e){
            e.printStackTrace();
        }
    }   
}

La fonction ci-dessus est initialisé dans mon onCreate en réponse à un clic sur un bouton indiqué dans ce code:

Button buttonLoadImage = (Button)findViewById(R.id.loadimage);
textTargetUri = (TextView)findViewById(R.id.targeturi);
targetImage = (ImageView)findViewById(R.id.targetimage);

buttonLoadImage.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
    Intent   intent = new Intent(Intent.ACTION_PICK,
    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, 0);
}});

Essentiellement, j'ai juste besoin de mettre cette valeur dans mon onCreate et de l'avoir mis l'image dans la fenêtre. Il affiche également un texte qui indique où l'image a été situé sur le périphérique, mais qui n'est pas aussi important pour moi que d'être en mesure d'avoir l'image reste à l'écran.

if (savedInstanceState != null) {


} 

Mais il semble effacer les données après le changement d'orientation?
Je n'ai aucune idée de comment faire pour enregistrer les données et de les restaurer à être utilisée dans ce type boolean.
J'apprécie tous les conseils, code, ou des liens que vous pouvez offrir!


Mise à JOUR:

Merci Vishal Vijay et rajahsekar pour votre rapide et les réponses utiles. À l'aide de vos deux conseillé de codage ainsi que le peu de code que j'avais trouvé à partir de précédentes recherches, j'ai été en mesure de compiler une solution. Cependant, alors qu'il a résolu le premier problème, il a engendré un autre que je vais décrire, après de montrer le code que j'ai utilisé pour résoudre le problème initial.

J'ai trouvé que j'avais 2 options disponibles pour la restauration de la partie.

Soit je pouvais le mettre dans le onCreate:

if (savedInstanceState != null) {
        //if there is a bundle, use the saved image resource (if one is there)
        image = savedInstanceState.getParcelable("BitmapImage");
        targetImage.setImageBitmap(image);
        textTargetUri.setText(savedInstanceState.getString("path_to_picture"));R.drawable.camera_button);
    }   

Cela m'a permis d'avoir à la fois de l'image ainsi que le chemin d'accès de l'appareil, pour être affiché à nouveau sur mon activité.

Ou je pourrais avoir ce après le onCreate

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState){       
        image = savedInstanceState.getParcelable("BitmapImage");
        targetImage.setImageBitmap(image);
        textTargetUri.setText(savedInstanceState.getString("path_to_picture"));
}

et la fonction d'économie que j'ai utilisé était

@Override 
public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putParcelable("BitmapImage", bitmap);
    savedInstanceState.putString("path_to_picture", picture_location);
}   

De préciser où picture_location est venu, de retour dans mon onActivityResult fonction j'ai ajouté une ligne et changé les autres pour gagner de la chaîne de chemin

if (resultCode == RESULT_OK){
    Uri targetUri = data.getData();
    picture_location = targetUri.toString();
    textTargetUri.setText(picture_location);

Comme pour les variables initialisées avant le onCreate,

Bitmap image;
Bitmap bitmap;
String picture_location;

Maintenant, je me rends compte que cela a eu assez long mais j'espère que ça aidera d'autres personnes qui ont un problème similaire. Comme pour le nouveau problème que j'ai mentionné plus tôt, quand je tourne mon appareil android, il n'en fait garder les données et les afficher à nouveau ce que j'essayais de faire. Cependant, lorsque je tourne l'écran à nouveau, l'original, le problème se pose; les données semble être perdu et n'est pas affiché sur l'écran.

J'espère qu'il est beaucoup plus simple correctif, afin que la sauvegarder et de restaurer les fonctions de continuer à travailler n'importe comment beaucoup de fois l'orientation de l'écran change?

Merci encore les gars!

utiliser Android Requête pour que.

OriginalL'auteur DeadJohnDoe | 2014-01-11