【问题标题】:Android: Calling Second time onActivityResult throw errorAndroid:第二次调用onActivityResult抛出错误
【发布时间】:2012-06-26 17:34:11
【问题描述】:

在我的应用程序中,当我单击按钮时,它会捕获一些图像。当我第一次单击此按钮时,相机 Intent 打开后,应用程序调用 onActivityResult,然后应用程序调用 onResume 方法,一切正常。但是,当我第二次单击按钮时,应用程序会调用相机意图,但在该应用程序调用 onCreate 方法之后,再调用 onActivityResult 方法。我不明白为什么程序会调用 onCreate 方法。因此,我的程序会抛出一些错误。

代码(当点击按钮时调用addPhoto方法):

protected void addPhoto() {
System.out.println("*** addPhoto() ***");

    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    out1 = Environment.getExternalStorageDirectory(); // out1 is initialized as File out1 = null;
    photoDateString = new DateClass().getCurrentDateAndTime();//this line give current date and time as photo name
    out1 = new File(out, "xxx/images/" + photoDateString + ".jpg");
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out1));
    startActivityForResult(i, CAMERA_REQUEST);

 System.out.println("*** End of addPhoto() ***");
}

代码(onActivityResult):

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    System.out.println("*** onActivityResult() ***");

    if (out1 != null && out1.exists()) { 
        // some code
    }
    //some code
    System.out.println("*** End of onActivityResult() ***");
}

因为程序在 onActivityResult 之前调用 onCreate 方法,所以 if (out1 != null && out1.exists()) {

我不知道我需要做什么。

错误信息:

java.lang.RuntimeException: Unable to resume activity {com.pxxl.android.lxxxy/com.pxxl.android.lxxxy.FirstActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.pxxl.android.lxxxy/com.pxxl.android.lxxxy.FirstActivity}: java.lang.NullPointerException

【问题讨论】:

  • 检查 if(requestCode == CAMERA_REQUEST && resultCode == RESULT_OK)

标签: java android android-intent oncreate android-camera-intent


【解决方案1】:

您似乎没有在活动生命周期回调中保存 out1。使用onSaveInstanceState()onRestoreInstanceState() 保存/恢复其值。

这里是关于活动状态处理的更详细的解释:Saving Activity State

【讨论】:

  • 我添加了一个指向指南的链接,您可以在其中找到解释。
  • 基本上,操作系统重新创建您的活动实例是可以的(这有很多原因 - 例如设备配置更改或内存需求),您只需要正确保存和恢复状态即可获取空指针异常。
猜你喜欢
  • 2020-03-23
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多