Android - 在两个活动之间传递数据得到NullPointerException

时间:2014-12-04 05:30:00

标签: java android android-intent android-activity nullpointerexception

我有3个活动我们将它们称为A,B和C.A和B都有意图将视图发送给C.并设计一个C来自不同的事情发生在C&C的活动上。我将这样的数据从A传递到C:

Intent intent = new Intent(this, C.class);
    intent.putExtra("Action", "A");
    startActivity(intent);

然后在C&C的onCreate方法中我有这样的事情:

Bundle extras = getIntent().getExtras();
if (extras.getString("Action").equals("A")) {
//DO SOMETHING
}

然后我从B到C我有

 Intent intent = new Intent(this, C.class);
 startActivity(intent);

然后我得到了NullPointerException,我猜这是因为我没有指定一个String" Action"从B到C时。

现在我可以在这种情况下为B添加一行,但是,如果有更多的活动或大型项目,这将不会很好,因为对于每个活动,我需要这个。

我怎么能拥有它,所以如果不添加"动作"我就不会得到这个例外。刺激活动B?

提前感谢您的帮助。

修改

如果我从A到C有这个

Intent intent = new Intent(this, C.class);
    intent.putExtra("Action", "A");
    intent.putExtra("Action2", "A");
    startActivity(intent);

这从B到C

 Intent intent = new Intent(this, C.class);
    intent.putExtra("Action", "B");
    startActivity(intent);

然后在onCreate of C中它从B到C时失败:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    if (extras.getString("Action").equals("A")) {
    //DO SOMETHING
    }
    else if (extras.getString("Action2").equals("A")) {
     //DO Stuuf
    }
}

7 个答案:

答案 0 :(得分:2)

更改C类中的代码,以检查bundle是否为null。

Bundle extras = getIntent().getExtras();
if(extras != null){
   if(extras.getString("Action") != null)
      if (extras.getString("Action").equals("A")) {
        //DO SOMETHING
      }
   }  
 if(extras.getString("Action2") != null)
      if (extras.getString("Action2").equals("A2")) {
        //DO SOMETHING
      }
   }  
}

答案 1 :(得分:0)

检查以下代码:

if(getIntent().hasExtra("Action"))
    //if you have passed "Action" from activity
else
   //if you did not pass "Action" from activity

答案 2 :(得分:0)

试试这个......

Bundle extras = getIntent().getExtras();
if(extras != null){
if (extras.getString("Action").toString().equals("A") || extras.getString("Action").toString() == "A") {
//DO SOMETHING
}
}

答案 3 :(得分:0)

希望这可以解决

Bundle extras = getIntent().getExtras();
if (extras != null && extras.getString("Action").equals("A")) {
//DO SOMETHING
}

答案 4 :(得分:0)

NullPointerException这将会发生,因为当您从活动A转移到C时,您将使用值传递intent,而在活动C中,您将使用Bundle获取该值。但是当你从活动B移动到C时,你没有通过意图传递值,而在活动C中你已经写了这个

Bundle extras = getIntent().getExtras();
if (extras.getString("Action").equals("A")) {
//DO SOMETHING
}

在这个时候额外是null所以你会得到错误。

这样做

Bundle extras = getIntent().getExtras();
if(extras != null)//This one will check for null
if (extras.getString("Action").equals("A")) {
    //DO SOMETHING
}

修改 用于从活动传递多个值

Intent intent= new Intent(this,NextActivity.class);
Bundle extra = new Bundle();
extra.putString("Action1","Value1");
extra.putString("Action2","Value2");
intent.putExtras(extra);
startActivity(intent);

在NextActivity中

Intent i = getIntent();
Bundle extras = i.getExtras();
String strAction1 = extras.getString("Action1");
String strAction2 = extras.getString("Action2");

答案 5 :(得分:0)

您正在启动Activity C两次(无论何时调用startActivity(intent))。第一次来自A,第二次来自B.这两次你都在检查

Bundle extras = getIntent().getExtras();
if (extras.getString("Action").equals("A")) {
//DO SOMETHING
}

哪个绑定会给你一个空指针异常。在IDE中设置一个断点并验证它。 为什么不使用一些静态变量来共享活动之间的信息,以防你不想多次实例化C类。

答案 6 :(得分:0)

当你搬到新活动时,你总是在创建新的Intent对象。因此这个问题。尝试以新的意图和访问方式复制所需的数据。