문제

My application does this: takes a photo, then show the photo in an ImageView. The weird thing is that the photo is displayed for about a second (after taking it with the camera), and then the ImageView is empty again.

This is my code:

publish.xml

<ImageView
    android:id="@+id/itemImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
     />

PublishActivity.java

package ar.com.guiagratis;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class PublishActivity extends Activity {
    final int TAKE_PICTURE_REQUEST_CODE = 115;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.publish);        
    }

    public void btnNextClick(View v) {
        // TODO: disable all buttons
        //Intent intent=new Intent(getApplicationContext(), TakePhotoActivity.class);
        // startActivityForResult(intent, TAKE_PICTURE_RESULT_CODE);    

         Toast.makeText(getApplicationContext(), "Sacate una foto viteh", Toast.LENGTH_SHORT).show();

         Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
         File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
         Uri imageUri = Uri.fromFile(photoFile);
         intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
         startActivityForResult(intent, TAKE_PICTURE_REQUEST_CODE);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {        
        switch (requestCode) {
            case TAKE_PICTURE_REQUEST_CODE:
                if (resultCode == Activity.RESULT_OK) {
                    File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
                    Uri imageUri = Uri.fromFile(photoFile);

                    // Image captured and saved to fileUri specified in the Intent
                    Toast.makeText(this, "Image saved to:\n" +
                            imageUri, Toast.LENGTH_LONG).show();

                    Bitmap myBitmap = BitmapFactory.decodeFile(imageUri.getPath());
                    BitmapDrawable ob = new BitmapDrawable(myBitmap);
                    ImageView myImage = (ImageView) findViewById(R.id.itemImage);
                    myImage.setBackgroundDrawable(ob);

                    Toast.makeText(getApplicationContext(), "Qué linda foto! ", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), "Hubo un problema al subir la imágen... ", Toast.LENGTH_SHORT).show();                  
                }
        }
    }
}

Any help will be appreciated.

도움이 되었습니까?

해결책 2

Ok, I finally found the problem. I was not aware that I need to use onSaveInstanceState and onRestoreInstanceState to store the values I don't want to loose from an Activity when I'm doing certain things, like initiating the Camera and taking a photo.

So I added this code:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate if the process is
    // killed and restarted.
    savedInstanceState.putBoolean("photoUploaded", photoUploaded);   
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate.
    photoUploaded = savedInstanceState.getBoolean("photoUploaded");

    if (photoUploaded) {
        File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
        Uri imageUri = Uri.fromFile(photoFile);

        Bitmap myBitmap = BitmapFactory.decodeFile(imageUri.getPath());
        BitmapDrawable ob = new BitmapDrawable(myBitmap);
        ImageView myImage = (ImageView) findViewById(R.id.uploadedImage);
        myImage.setBackgroundDrawable(ob);
    }   
}

and now is working.

Not sure how to do to make this question as solved.

다른 팁

You're using setBackgroundDrawable(Drawable drawable) which sets the View's background.

If you want to change the ImageView's content you need to use

setImageDrawable(Drawable drawable)

or

setImageBitmap(Bitmap bm)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top