我正在从MainActivity调用SubActivity,在该SubActivity中,我必须在MainActivity中调用方法。如果我通过使用

MainActivity test = new MainActivity();
...
test.method("test");


我收到致命提示“无法启动活动” NullPointerException。

我也试过MainActivity.method("test"),但这也行不通。通过MainActivity.booleanVariable = true;可以在MainActivity中更改变量

什么会导致NullPointerException?我会错过一些我现在还盲目的基础知识吗?

最佳答案

永远不要像这样实例化Activity

MainActivity test = new MainActivity();


使用Intent调用Activity。现在...


  我正在从MainActivity调用SubActivity,在该SubActivity中,我必须在MainActivity中调用方法。


如果它是子Activity,则表示它是extends MainActivity。如果是这种情况,那么您可以执行以下操作

@Override
public returnType myMethod(params)  // where returnType is int, boolean, void etc...
                                    // and params are parameters the method takes (if any)
{
    super.myMethod(params);
    // other code if needed
}


如果子Activity没有extends MainActivity,请详细说明为什么需要这样做,我们可以帮助您找到更好的方法。

编辑

通过阅读上面的评论(“ ...在我的MainActivity中用onActivityResult捕获它”),我认为您对startActivityForResult()的工作方式感到困惑,并且一开始可能很棘手。如果你打电话

Intent i = new Intent(SecondActivity.this, FirstActivity.class);
// put extras if needed
starActivityForResult(i);


在第二个Activity中,然后onActivityResult()也将进入第二个Activity。当您在此处调用FirstActivity时,将从setResult()调用它。

09-27 01:39
查看更多