【问题标题】:Android - Pass Data Between Two Activities get NullPointerExceptionAndroid - 在两个活动之间传递数据得到 NullPointerException
【发布时间】:2014-12-04 05:30:00
【问题描述】:

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

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

然后在 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,我猜这是因为从 B 到 C 时我没有指定字符串“Action”。

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

如果不向活动 B 添加“Action”刺痛,我怎样才能拥有它,这样我就不会得到这个异常?

提前感谢您的帮助。

编辑

如果我从 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);

然后在 C 的 onCreate 中,从 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
    }
}

【问题讨论】:

  • 您来自 B 的意图没有额外内容,因此当您调用 extras.getString() 时,您会得到一个 NPE。如下所述,检查 @Remees M Syde 是否为 null。

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


【解决方案1】:

像这样更改 C 类中的代码以检查捆绑包是否为空。

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
      }
   }  
}

【讨论】:

  • 嘿,这行得通,但是如果我要发送两条数据,并且不要同时设置它会中断。有办法解决吗?
  • 从 A 或 B Activity 发送数据并在 C 中像这样接收。
【解决方案2】:

检查以下代码:

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

【讨论】:

    【解决方案3】:

    试试这个...

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

    【讨论】:

      【解决方案4】:

      希望能解决

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

      【讨论】:

      • 嘿,这行得通,但是如果我要发送两条数据,并且不要同时设置它会中断。有办法解决吗?
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        此时 extra 为 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");
        

        【讨论】:

        • 嘿,这行得通,但是如果我要发送两条数据,并且不要同时设置它会中断。有办法解决吗?
        • 你想从活动中传递两个值
        【解决方案7】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-12
          • 2014-11-01
          • 1970-01-01
          • 2015-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多