启动Activity时抛出NullPointerException异常

3
java.lang.NullPointerException
at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:3405)
at android.view.View.cancelPendingInputEvents(View.java:13591)
at android.app.Activity.startActivityForResult(Activity.java:3554)
at android.app.Activity.startActivityForResult(Activity.java:3493)
at android.app.Activity.startActivity(Activity.java:3735)
at android.app.Activity.startActivity(Activity.java:3703)
at com.example.mobile.dt.startActivity(PActivity.java:223)
at com.example.mobile.label.SplashActivity.d(SplashActivity.java:280)
at com.example.mobile.label.SplashActivity.b(SplashActivity.java:266)
at com.example.mobile.label.SplashActivity.c(SplashActivity.java:512)
at com.example.mobile.label.SplashActivity.b(SplashActivity.java:446)
at com.example.mobile.label.y.run(SplashActivity.java:388)
at java.lang.Thread.run(Thread.java:841)

我正在创建一个继承自BaseActivity的ChildActivity。当我尝试调用startActivity(intent)时会发生以下情况。
SplashActivity(Child)
public void openLoginActivity() {
    Intent intent = new Intent(this, com.example.mobile.LoginActivity.class);
    startActivity(intent);
    finish();
}

在BaseActivity中

@Override
public void startActivity(Intent intent) {
    super.startActivity(intent);
}

这是在SplashActivity中调用的代码:388,我正在调用StatusResponse(PResponse)。

private void StatusResponse(Response response) { 
    JSONObject jsonResponse = response.response;
    if (jsonResponse == null) {
        restart();
        return;
    } else {

        try {
            openLoginActivity();
        } catch (JSONException ex) {
            restart();
            return;
        }
    }
}

有时候它会抛出异常,我不确定为什么会这样。

有人能帮帮我吗!!!


2
为什么要覆盖startActivity方法? - Blackbelt
在您的Intent声明中删除包 Intent intent = new Intent(this, LoginActivity.class); - jDur
你是否在自己的线程中使用了 startActivity - mapodev
你能展示一下这里是什么吗:SplashActivity.java:388? - mapodev
大家好,我尝试过没有包声明的方式,就像只有 LoginActivity.class 一样,但是有时候会抛出异常。 - Hideme Sri
显示剩余2条评论
1个回答

0

你正在创建一个带有第一个参数this的Intent。 然后就在删除活动。 我认为系统找不到变量this的值。

startActivity()之后不需要启动finish()。 垃圾收集器会在一段时间后删除未使用的变量。这就是为什么它会随机失败的原因。

编辑:

我的错,我认为你目前正在使用response而没有检查它是否存在。 所以添加一个IF,像这样:

if (response != null) {
    JSONObject jsonResponse = response.response;
    // SOME CODE
}

我们可以在startActivity之前调用finish()。这与垃圾收集器无关。 - Hideme Sri
如果这是未经检查的响应访问,调用堆栈将会有所不同。 - P.Melch

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