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ÇÃOComoAlex 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!.