【问题标题】:Extending BaseActivity showing null pointer on super.oncreate扩展 BaseActivity 在 super.oncreate 上显示空指针
【发布时间】:2018-07-23 01:44:47
【问题描述】:

BaseActivity.java

    public class BaseActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            DMCApplication.getInstance().addActivity(this);
        }

        @Override
        protected void onDestroy() {
            DMCApplication.getInstance().removeActivity(this);
            super.onDestroy();
        }
    }

SplashScreenActivity.java

    public class SplashScreenActivity extends BaseActivity {

        private Handler handler = new Handler();

        private static final int sDelayTime = 2000;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_splash_screen);

            startService();
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    startMainActivity();
                }
            }, sDelayTime);
        }

        private void startMainActivity() {
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);
            finish();
        }

        private void startService() {

        }
}

DMCApplication.java

public class DMCApplication extends Application {

    private static DMCApplication mDmcApplication;

    private List<Activity> activities;

    public ControlPoint mControlPoint;

    @Override
    public void onCreate() {
        super.onCreate();
        if (activities != null) {
            activities = null;
        }
        activities = new ArrayList<Activity>();
        mDmcApplication = this;
    }


    public void addActivity(Activity activity) {
        if (activities != null) {
            if (activities.contains(activity)) {
                activities.remove(activity);
            }
            activities.add(activity);
        }
    }


    public void removeActivity(Activity activity) {
        if (activities != null && activities.contains(activity)) {
            activities.remove(activity);
        }
    }


    public static DMCApplication getInstance() {
        return mDmcApplication;
    }


    public void quit() {
        if (activities != null) {
            for (Activity activity : activities) {
                activity.finish();
            }
            activities = null;
        }
    }


    public void setControlPoint(ControlPoint controlPoint) {
        mControlPoint = controlPoint;
    }


    public ControlPoint getControlPoint() {
        return mControlPoint;
    }
}

Logcat

java.lang.RuntimeException: 无法启动活动 ComponentInfo{ com.abc.xyx/com.abc.xyx.actvities.SplashScreenActivity}:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.abc.xyx.DMCApplication.addActivity(android.app.Activity)” 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046) 在 android.app.ActivityThread.-wrap11(未知来源:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6809) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.agileapps.dlnaupnp.DMCApplication.addActivity(android.app.Activity)” 在 com.abc.xyx.actvities.BaseActivity.onCreate(BaseActivity.java:14) 在 com.abc.xyx.actvities.SplashScreenActivity.onCreate(SplashScreenActivity.java:22) 在 android.app.Activity.performCreate(Activity.java:6998) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1230) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2899)

【问题讨论】:

  • 您可能忘记在清单中声明您的自定义 Application

标签: android


【解决方案1】:

您尚未在Manifest 中注册您的DMCApplication。 你必须做这样的事情

 <application
    android:name=".DMCApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"

附: name 应该是完全限定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多