Android startCamera daje mi null Intent i… czy niszczy moją globalną zmienną?
Mam następny problem:
kiedy próbuję uruchomić aparat, mogę zrobić zdjęcie, nawet zapisać je na mojej karcie SD, ale kiedy zamierzam uzyskać ścieżkę pokazywania go na moim urządzeniu, otrzymuję błędy.
Moje zmienne globalne to 2 (użyłem 1, ale 2 są lepsze do upewnienia się, że to dziwny błąd):
private File photofile;
private Uri mMakePhotoUri;
a to jest moja funkcja aparatu startowego:
@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
}
i moja aktywność spowodowała:
@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();
}
......
......
.......
}
Zawsze otrzymuję wyjątek NullPointerException
Ale...jeśli zrobię zdjęcie jeszcze raz, TO DZIAŁA !!.
Przeczytałem wszystko, co mogłem tutaj ... ale nie ma logiki, gdy modyfikuję zmienną globalną i nie mogę jej powtórzyć ...
Z góry dziękuję. Twoje zdrowie.
ROZWIĄZANIETak jakAlex Cohn powiedziałem, mój problem polegał na tym, że dzwoniłemonCreate
przedonActivityResult
z powodu prawdopodobnie wypchnięcia pamięci (ponieważ czasami tego nie robi), więc chciałem, aby moja aplikacja była „zdrowa” i próbowałem niektórychtry / catch
i tak otrzymuję dane, nawet jeśli dzwonionCreate
lubonActivityResult
dla pierwszego połączenia i napisałem te dane w pakiecie, jak wyjaśniono w linkuprzywracanie naszego stanu.
Dzięki!.