Android startCamera me dá nulo Intenção e… destrói minha variável global?

Eu tenho o próximo problema:

Quando eu tento iniciar minha câmera, eu posso tirar a foto, até mesmo salvar no meu cartão SD, mas quando eu vou pegar o caminho para mostrar no meu dispositivo eu recebo erros.

Minhas variáveis ​​globais são 2 (usei 1, mas 2 são melhores para garantir que seja um erro estranho):

    private File photofile;
private Uri mMakePhotoUri;

e esta é a minha função de câmera inicial:

@SuppressLint("SimpleDateFormat")
public void farefoto(int num){
// For naming the picture
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
    String n = sdf.format(new Date());
    String fotoname = "Immagine-"+ n +".jpg";

//Going through files and  folders
    File photostorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File photostorage2 = new File(photostorage, "Immagini");
    System.out.println(photostorage+"\n"+photostorage2);
    photostorage2.mkdirs();
// My file (global)
    photofile = new File(photostorage2, fotoname);
    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //intent to start camera
// My URI (global)
    mMakePhotoUri = Uri.fromFile(photofile);
    new Bundle(); // I took this code from internet, but if I remove this line, it's the same
    i.putExtra(MediaStore.EXTRA_OUTPUT, mMakePhotoUri);
    startActivityForResult(i, num); //num would be 1 on calling function
}

e meu resultado da atividade:

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if (requestCode == 1){

            try{ // tring my global URI
                photo = f.decodeAndResizeFile(new File(mMakePhotoUri.getPath()));
            }
            catch(NullPointerException ex){
                System.out.println("fail");
                ex.printStackTrace();
                try{ // Trying my global FILE
                photo = BitmapFactory.decodeFile(photofile.getAbsolutePath());
                } catch (Exception e){
                    e.printStackTrace();
                    Toast.makeText(this, "C'è stato un errore. Riprova a scattare la foto.", Toast.LENGTH_LONG).show();
                }

......
......
.......
}

Sempre recebendo NullPointerException

Mas...se eu tirar a foto novamente, FUNCIONA !!.

Eu li tudo o que pude aqui ... mas não tem lógica quando modifico uma variável global e não consigo mais fazer isso ...

Desde já, obrigado. Felicidades.

SOLUÇÃO

ComoAlex Cohn disse, meu problema era que eu estava ligandoonCreate antesonActivityResult por causa de um provavelmente empurrar para fora da memória (porque às vezes não faz isso), então eu queria ter o meu aplicativo "saudável" e eu tentei algunstry / catch e assim eu recebo os dados mesmo que esteja chamandoonCreate ouonActivityResult para a primeira chamada, e eu escrevi esses dados em um pacote como explicado no link derestaurando nosso estado.

Obrigado!.