我有以下代码:

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输出,这将有所帮助。

07-27 16:13