Java 从子活动调用MainActivity中的方法

Java 从子活动调用MainActivity中的方法,java,android,Java,Android,我正在从MainActivity调用一个子活动,在该子活动中,我必须在MainActivity中调用一个方法。如果我使用 MainActivity test = new MainActivity(); ... test.method("test"); 我得到一个致命的例外“无法启动活动”NullPointerException 我还尝试了MainActivity.method(“test”),但也不起作用。通过MainActivity.booleanVariable=true,更改MainAc

我正在从MainActivity调用一个子活动,在该子活动中,我必须在MainActivity中调用一个方法。如果我使用

MainActivity test = new MainActivity();
...
test.method("test");
我得到一个致命的例外“无法启动活动”NullPointerException

我还尝试了
MainActivity.method(“test”)
,但也不起作用。通过
MainActivity.booleanVariable=true,更改MainActivity中的变量有效


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

main活动中
onCreate中(例如):

在第二个活动中:

class SecondActivity extends Activity
{
   public static void test(String term)
   {
      Log.d("SecondActivity",term);
   }
}
但是 我强烈建议您在实际项目中不要使用这种方法。而对于测试-就可以了。

最好的方法是使用intent、或使用回调(googleit)

例如:

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") +"");
   }
}

您必须在清单中声明这两个活动。我想我可以给你一个延长的起点。

不要像这样实例化一个
活动

MainActivity test = new MainActivity();
使用
意图
调用
活动
。现在

我正在从MainActivity调用一个子活动,在该子活动中,我必须在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
}
如果子
活动
没有扩展主活动
,请详细说明为什么需要这样做,我们可以帮助找到更好的方法

编辑

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

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

在您的第二个
活动中
然后
onActivityResult()
也将进入您的第二个
活动中
。当您在那里调用
setResult()
时,它将从
FirstActivity
调用。

方法是什么样子的?如果您想在另一个活动上使用方法,您应该知道意图或至少静态引用。@R.id.pandacoder永远不要对活动进行静态引用。内存泄漏。不应使用
new
创建活动。仅使用
意图
。将通用代码放入自定义类中。您应该使用
Intent
和extras将数据传递给
活动
startActivityForResult()
并结合
setResult()
返回结果。如果您对此有问题,请提出新问题。不要试图寻找其他技术,因为你无法让它工作。你甚至不应该测试这个。规则很简单。不要试图从另一个活动访问一个活动中的任何内容。在活动中使用静态方法是错误的。大错特错,我再重复一遍。我知道静态变量及其使用的后果。那么,为什么还要向noob建议呢?我看到了一个级别的答案,所以不要进行圣战:)嗯,在阅读了一些文章后,我认为,亚活动是不对的,它只是另一种活动,所以最好称之为第二活动。。使用Intent时,我已经有了带有switch/case构造的“onActivityResult(int-requestCode,int-resultCode,Intent-data)”,但是当我想在第二个activity中的不同点上启动putExtra时,应该将“putExtra”放在哪里呢?我有点困惑,但您使用的是
putExtra()
s在创建
Intent
之后,通常在调用
startActivityForResult()
之前。在实例化
Intent
之后,您可以随时添加
额外的
,但在调用
startActivity()
方法之一之前,它不会被发送。@user2808184我对如何使用它做了简短的编辑。也许这会有所帮助,但我有点担心,如果每次我想在MainActivity中使用该方法时都通过Intents启动MainActivity,它会导致其他问题?我不知道您会导致什么问题。您启动
活动
以获得结果,然后完成该
活动
…没什么大不了的。如果它是在多个<代码>活动< /代码>中使用的方法,那么您可以考虑我在答案中所解释的内容,并将其扩展到其他方面。
Intent i = new Intent(SecondActivity.this, FirstActivity.class);
// put extras if needed
starActivityForResult(i);