如何检查putExtra是否存在?

时间:2016-11-30 08:08:35

标签: android android-intent bundle

我的图表如下

Activity 1 --send data--> Service1
                            ^
                            |
Open app--------------------
                            ^
                            |
Activity 2------------------

这意味着活动1将数据发送到服务1.服务1是正在运行的后台服务,onStartCommand()的返回值为START_STICKY。目前,我正在使用putExtra()函数来交换数据。在服务中,我将按以下步骤获取以下数据:

Activity 1

Intent start_service = new Intent(getContext(), ConnectService.class);
start_service.putExtra("data", "123");
getContext().startService(start_service);

Service 1

的onStartCommand()中
 String data=null;
 if(intent.hasExtra("data")){
    Bundle bundle = intent.getExtras();
    if(!bundle.getString("data").equals(null)){
        data= bundle.getString("data");
    }
  }
  else
       data="0";

我使用hasExtra函数检查是否设置了data。在我的目的中,案例1是服务1可以从Activity 1接收数据。在案例2中,如果我们不从活动1开始,例如,当我清理所有正在运行的应用程序时,由于START_STICKY,手机将自动打开服务1,服务1将设置数据相等& #34; 0&#34 ;.因此,我的问题来自第二种情况,应用程序崩溃,因为它无法检查Extra存在与否。

  

引起:java.lang.NullPointerException:尝试调用虚方法' boolean android.content.Intent.hasExtra(java.lang.String)'在空对象引用上

我该如何解决这个问题?谢谢所有

2 个答案:

答案 0 :(得分:5)

 String data=null;
 if(getIntent()!=null && getIntent().getExtras()!=null){
    Bundle bundle = getIntent().getExtras();
    if(!bundle.getString("data").equals(null)){
        data= bundle.getString("data");
    }
 }
 else
 data="0";

试试这个,注意条件

的变化

答案 1 :(得分:2)

此步骤intent可能为null。您的代码也会导致数据的空值。相反,你可以做类似以下的事情:

String data = null;
if (intent != null) {
    data = intent.getStringExtra("data");
}
if (data == null) {
    data = "0";
}

此外,您不应使用equals()来检查空值。请始终使用== null