Android startCamera дает мне null Intent и … разрушает мою глобальную переменную?

У меня есть следующая проблема:

когда я пытаюсь запустить свою камеру, я могу сделать снимок, даже сохранить его на моей SD-карте, но когда я собираюсь найти путь для показа на моем устройстве, я получаю ошибки.

Мои глобальные переменные – 2 (я использовал 1, но 2 лучше для того, чтобы убедиться, что это странная ошибка):

private File photofile; private Uri mMakePhotoUri; 

и это моя функция запуска камеры:

 @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 } 

и моя активность:

  @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(); } ...... ...... ....... } 

Всегда получать исключение NullPointerException

Но … если я снова сделаю снимок, ЭТО РАБОТАЕТ !! ,

Я прочитал все, что мог здесь … но у меня нет логики, когда я изменяю глобальную переменную, и я не могу принять ее снова …

Заранее спасибо. Приветствия.


РЕШЕНИЕ

Как сказал Алекс Кон , моя проблема заключалась в том, что я вызывал onCreate перед onActivityResult из-за возможного выхода из памяти (потому что иногда этого не делает), поэтому я хотел, чтобы мое приложение «здорово», и я попробовал try / catch и поэтому я получаю данные, даже если он вызывает onCreate или onActivityResult для первого вызова, и я написал эти данные в Bundle, как описано в ссылке восстановления нашего состояния .

Благодаря!.

    Возможно, запуск ACTION_IMAGE_CAPTURE приведет к ACTION_IMAGE_CAPTURE вашей активности из памяти. Вы должны проверить (я просто журнал, отладчик может иметь свои собственные побочные эффекты), что onCreate() вашей деятельности вызывается до onActivityResult() . Если это так, вы должны подготовить свою деятельность для onSaveInstanceState(Bundle) инициализации, возможно, используя onSaveInstanceState(Bundle) .

    Обратите внимание, что решение о том, следует ли отключать действие или сохранять его в фоновом режиме, зависит от общего состояния системы, которое не поддается контролю. Меня не удивит, если решение, когда вы сделаете первый снимок, «закрывает его!», Но когда вы делаете снимок снова, он «держит его в фоновом режиме».

    Он не уничтожает переменные. Но после стольких дней исследований LOL у меня есть решение моей ошибки. Когда я помещаю отладчик, метод вызывает его, как после съемки.

    • OnCreate ()
    • onActivityResult ()
    • onCeate ()
    • onResume ()

    Его зафиксировано, просто введя следующие строки в манифест. Это происходит из-за изменений конфигурации камеры и режима мягкого ввода windows.

       Размер   
    Давайте будем гением компьютера.