0

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

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

我得到一个致命的异常“无法启动活动”NullPointerException。

我也尝试过MainActivity.method("test"),但这也行不通。更改 MainActivity 中的变量有效,通过MainActivity.booleanVariable = true;

什么可能导致 NullPointerException?我是否错过了一些基本的东西,我现在太盲目了?

4

2 回答 2

2

永远不要实例化Activity这样的

MainActivity test = new MainActivity();

使用 anIntent来调用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
}

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

编辑

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

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

在你的第二个Activity然后onActivityResult()也将在你的第二个ActivityFirstActivity当你在那里打电话时,它将被调用setResult()

于 2013-10-28T22:17:43.923 回答
0

MainActivityonCreate(例如):

SecondActivity second = new SecondActivity();
second.test("Hello second");

SecondActivity

class SecondActivity extends Activity
{
   public static void test(String term)
   {
      Log.d("SecondActivity",term);
   }
}

但!

我强烈建议您在实际项目中避免使用这种方法。而对于测试- 会做。

为了获得最佳方式,您必须使用 Intents,或使用回调(为此谷歌)

例子 :

class MainActivity extends Activity
{
   public void onCreate(Bundle onSavedInstanceState)
   {
      super.onCreate(onSavedInstanceState);
      Intent intent = new Intent(this,SecondActivity.class);
      intent.putExtra("hi","Hello world!");
      startActivity(intent);
   }
}

class SecondActivity extends Activity
{
   public void onCreate(Bundle onSavedInstanceState)
   {
      super.onCreate(onSavedInstanceState);
      Intent intent = getIntent();
      Bundle temp = getIntent().getBundle();
      Lod.d("SecondActivity",temp.getStringExtra("hi","UNDEFINED") +"");
   }
}

您必须在 Manifest 中声明这两项活动。我想我给你延长的起点。

于 2013-10-28T22:17:03.433 回答