5

这是一个有趣的...

我有一个正在为运行 android 2.3.3 及更高版本的设备编写的应用程序。

它有一个通过 Intent 调用相机的主要活动。

如果用户单击按钮启动相机;然后拍照;然后单击“完成”返回主活动 - 应用程序工作正常,并在主活动的图像视图中显示新图片。

但是,如果用户在纵向使用主要活动;然后单击按钮打开相机意图并将方向更改为横向;然后单击完成返回主活动 - 应用程序崩溃

但是……但是,如果用户在纵向使用主要活动;然后单击按钮打开相机意图并将方向更改为横向;然后将方向更改回纵向(在相机中),然后单击完成以返回主活动 - 然后应用程序继续正常运行。

我尝试过的东西:我更改了清单文件以强制应用程序(主要活动)面向纵向(我也删除了这个)我已将此行添加到主要活动中以尝试处理重新绘制它上面的活动从相机意图返回:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在调试窗口中,我收到描述空指针异常的错误 - 我认为这是因为在要传递图像的方向更改后视图不再存在,除非方向与离开时的方向相同。

我有点卡住了,所以会很感激一些建议。

4

3 回答 3

3

当您的屏幕方向发生变化时,您的屏幕将Activity被销毁并以新的方向重新创建。因此,在 的生命周期内获得引用的任何变量都Activity将不再引用任何东西,如果您随后尝试访问它们引用的对象而不重新分配它们的值,您将得到一个NullPointerException.

该方法onSaveInstanceState()用于在配置更改之间保存临时数据。这会创建一个 Bundle,onCreate()Activity再次启动时传递给它。

没有任何代码,我不知道这是否是您的问题,但值得一看。

请参阅http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges了解更多信息(毫无疑问,我提供的信息比我提供的更准确)。

于 2012-06-21T11:35:08.203 回答
1

嘿,我不确定,但尝试将此属性放在清单文件中,希望它可以工作

android:configChanges="orientation|keyboardHidden" 
于 2012-06-21T11:53:04.827 回答
1

三星 S3 和 S4 等一些 Android 设备在横向模式下具有默认的相机表面视图。当您调用相机并捕获图像并进入您的应用程序时,无论您是否设置了方向 PORTRAIT,它都会首先以 LANDSCAPE 模式打开,然后更改为 PORTRAIT 模式。

它的 Android 操作系统行为。由于这个活动重新创建它自己。那时你得到空指针异常。您可以通过configChanges在清单文件中设置来处理。

android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"

并且您可以将数据临时存储在onSaveInstanceState()@Spinner 在他的回答中正确地说的中。

于 2015-12-18T06:00:35.667 回答