这是一个有趣的...
我正在为运行android 2.3.3及更高版本的设备编写应用程序。
它有一个主要活动,通过Intent调用相机。
如果用户点击按钮启动相机;然后拍照;然后单击“完成”返回主活动 - 应用程序正常工作,并在主要活动的图像视图中显示新图片。
但是,如果用户以纵向方式使用主要活动;然后单击按钮打开相机意图并将方向更改为横向;然后单击“完成”返回主活动 - 应用程序崩溃
但是......但是,如果用户以纵向方式使用主要活动;然后单击按钮打开相机意图并将方向更改为横向;然后在单击完成之前将方向更改回肖像(在相机中)以返回主活动 - 然后应用程序继续正常运行。
我试过的东西: 我已经更改了清单文件以强制应用程序(主要活动)以纵向方式定向(我也删除了这个) 我已将此行添加到主活动中,以尝试处理从相机意图返回的活动的重新绘制:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
在调试窗口中,我得到描述空指针异常的错误 - 我认为这是因为在传递图像的方向更改之后视图不再存在,除非方向与它离开时相同。
我有点卡住,所以会很感激一些建议。
答案 0 :(得分:3)
当您的屏幕方向发生变化时,您的Activity
将被销毁并以新方向重新创建。因此,在Activity
生命期内获得引用的任何变量将不再引用任何内容,如果您尝试访问它们引用的对象而不重新赋值,则会得到{{1 }}
方法NullPointerException
用于在配置更改之间保存临时数据。这会创建一个Bundle,当onSaveInstanceState()
再次启动时会传递给onCreate()
。
没有任何代码,我不知道这是不是你的问题,但值得一看。
有关详细信息,请参阅http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges(毫无疑问,这些信息比我提供的信息更准确)。
答案 1 :(得分:1)
嘿,我不确定但是尝试将此属性放在清单文件中,希望它能够正常工作
android:configChanges="orientation|keyboardHidden"
答案 2 :(得分:1)
某些Android设备(如Samsung S3和S4)在横向模式下具有默认的相机表面视图。 当您调用相机并捕获图像并进入应用程序时,无论您是否设置了方向肖像,它将首先在LANDSCAPE模式下打开,然后更改为PORTRAIT模式。
其Android操作系统行为。
由于此活动重新创建它自己。那时你得到Null Pointer Exception。
您可以通过在清单文件中设置configChanges
来处理。
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
你可以将数据临时存储在onSaveInstanceState()
中@Spinner正确地说出来。