我有以下代码:
Log.e("MainScreen", "1");
ListAction listAction = new ListAction(this);
Log.e("MainScreen", "2");
该代码仅在遇到Log.e(“ MainScreen”,“ 1”)之前运行。然后它崩溃了。但是,我不知道这怎么可能,因为该程序永远不会到达ListAction构造函数的第一行(Log.e(“ ListAction”,“ 1”);)。此外,当我删除ListAction listAction行时,它会很好。
以及提到的构造函数:
public ListAction(Context context) {
Log.e("ListAction", "1");
this.db = new DataBaseCreation(context);
Log.e("ListAction", "2");
db.open();
Log.e("ListAction", "3");
this.bdd = db.getBDD();
Log.e("ListAction", "4");
运行代码时不发布任何日志。
是什么赋予了?问题是什么?
输出:
03-26 03:54:54.680: E/MainScreen(534): 1
03-26 03:54:54.680: D/AndroidRuntime(534): Shutting down VM
03-26 03:54:54.690: W/dalvikvm(534): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-26 03:54:54.721: E/AndroidRuntime(534): FATAL EXCEPTION: main
03-26 03:54:54.721: E/AndroidRuntime(534): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.GroceryListManager/android.GroceryListManager.MainScreen}: java.lang.NullPointerException
03-26 03:54:54.721: E/AndroidRuntime(534): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
最佳答案
如果类ListAction
中有带有初始化程序的实例变量,则初始化程序将在构造函数的第一行之前执行。例如,您的课程可能如下所示:
public class ListAction {
public ListAction(Context context) {
. . .
}
private Thing mThing = new Thing();
}
如果其中一个初始化程序(如
new Thing()
)引发异常,则将产生您描述的行为。如果您发布崩溃的logcat输出,这将有所帮助。