Android的startCamera给我空意图和…它是否会摧毁我的全局variables?

我有下一个问题:

当我尝试启动相机时,我可以拍摄照片,甚至将其保存在我的SD卡上,但是当我要获取在设备上显示的path时,我会遇到错误。

我的全局variables是2(我用1但2更好,以确保这是一个奇怪的错误):

private File photofile; private Uri mMakePhotoUri; 

这是我的启动相机function:

 @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

但是, 如果我再次拍摄照片,它就会起作用!

我已经阅读了所有我可以在这里…但是当我修改一个全局variables时它没有逻辑,我不能再把它…

提前致谢。 干杯。


正如Alex Cohn所说,我的问题是我在onActivityResult之前调用了onCreate ,因为可能会导致内存不足(因为有时不会这样做),所以我想让我的应用程序“健康”,并尝试了一些try / catch所以即使第一次调用onCreateonActivityResult ,我也会得到这些数据,而且我将这些数据写入一个Bundle中,就像在恢复我们的状态的链接中所解释的那样。

谢谢!。

启动ACTION_IMAGE_CAPTURE可能会将您的活动推向内存。 你应该检查(我只是一个日志,debugging器可能有它自己的副作用) onCreate()你的活动之前调用onActivityResult() 。 如果是这种情况,你应该准备好你的活动重新初始化自己,可能使用onSaveInstanceState(Bundle)

请注意,closures活动或将其保留在后台的决定取决于您无法控制的整个系统状态。 如果拍摄第一张照片的决定是“closures他”,那么不会让我感到惊讶,但是当你再次拍照时,却是“保持他的背景”。

它不会破坏variables。 但经过这么多天的研究LOL,我已经得到了我的错误的解决scheme。 当我把debugging器的方法调用它后,就像拍照。

  • 的onCreate()
  • onActivityResult()
  • onCeate()
  • 的onResume()

它通过把这些下面的行放在了清单中来固定它。 这是由于相机configuration更改和窗口软input模式。

  <activity android:name="packageName.Activity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" >