应用程序在横屏模式下启动时崩溃。

3
我有一个应用程序。主要活动页面中有一个按钮,该按钮只能打开另一个活动页面。问题在于,当我在竖屏模式下操作时,一切都很正常。即使活动已经开始,我也可以将其更改为横屏模式并且一切正常。但是当第一个活动位于横屏模式并且我单击按钮启动新活动时,应用程序会崩溃。你有什么想法来解决这个问题吗?为什么它只在启动期间不起作用?为什么在我在竖屏模式下启动后,在横屏模式下它也能正常工作?
我还注意到另一件有趣的事情,那就是我删除了横屏文件夹中的布局xml文件后,它就不会再崩溃了。
04-26 15:09:50.558: E/AndroidRuntime(7034): FATAL EXCEPTION: main
04-26 15:09:50.558: E/AndroidRuntime(7034): Process: com.example.msapp2, PID: 7034
04-26 15:09:50.558: E/AndroidRuntime(7034): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.msapp2/com.example.msapp2.exercises.WorkoutBuddy}: java.lang.NullPointerException
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)

你有堆栈跟踪吗?或者一些代码可以帮助我们查看这个问题? - Steven V
肯定需要onCreate()来查看发生了什么。 - nKn
我不确定为什么会发生这种情况。你想要布局XML文件还是活动代码?在活动中发生了很多事情,很难说可能是什么导致了崩溃。但一旦以纵向模式启动,它就可以平稳运行。我在第二个活动中没有实现onConfigurationChanged()方法,也没有在横向布局文件夹中为该活动创建布局文件。 - streetsoldier
1
看看你的LogCat。它有很多话要说。当应用程序崩溃时,进入LogCat的“错误”模式并仔细阅读所打印的内容。这将让你找到问题的根本原因。如果你仍然无法自行解决问题,请在此发布,会有人来帮助你。 - An SO User
1个回答

5
很可能的情况是,您可能会得到一个引用到横屏布局(/layouts-land/activity*.xml)中不存在但在竖屏(/layouts/activity*.xml)布局中存在的布局元素。
例如,
Button button = (Button) findviewbyid(R.id.myButton);

如果你的设备处于竖屏模式下,这个方法可能会起作用,因为其中包含了一个 <Button /> 元素。但是在横屏布局中并没有相同的元素。

这会导致一个空指针异常(NullPointerException),这就是你得到的异常。它发生在你试图访问一个未被初始化的对象时。所以请注意你正在做什么。


1
我只是从纵向复制粘贴了我的xml内容到横向,并移动了位置。所有元素都存在于横向和纵向的xml文件中。不过我会再次确认一下。这是一个好建议。 - streetsoldier
1
有时候当你改变布局文件时,你需要清理一下你的项目。你也可以尝试这样做。并且检查一下你的android:id值是否在文件之间发生了变化。 - Doronz
1
另外,你知道当用户在活动中更改方向时,我如何更改要使用的布局文件吗?我知道这与onConfigurationChanged()方法有关。我应该在我的onConfigurationChanged()方法中执行setContentView(R.layout.landscape_layout)吗?抱歉,我对这一切都很新。 - streetsoldier
1
通常在onConfigurationChanged中不需要使用setContentView,因为当配置更改时,通常会调用onCreate。 - Joe Plante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接