Android 如何检查putExtra是否存在?

Android 如何检查putExtra是否存在?,android,android-intent,bundle,Android,Android Intent,Bundle,我有一个图表如下 Activity 1 --send data--> Service1 ^ | Open app-------------------- ^ | Activity 2------------------ 这意味着活动1将向服务1发送数据。服务1是一个正

我有一个图表如下

Activity 1 --send data--> Service1
                            ^
                            |
Open app--------------------
                            ^
                            |
Activity 2------------------
这意味着活动1将向服务1发送数据。服务1是一个正在运行的后台服务,在
onStartCommand()中返回
is
START\u
。目前,我正在使用
putExtra()
函数交换数据。在服务中,我将按照以下步骤获取额外数据:

活动1中

Intent start_service = new Intent(getContext(), ConnectService.class);
start_service.putExtra("data", "123");
getContext().startService(start_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可以从
活动1
接收数据。在案例2中,如果我们不从活动1开始,例如,当我清理所有正在运行的应用程序时,手机将自动打开服务1,原因是
start\u STICKY
,服务1将数据设置为等于“0”。因此,我的问题来自第二种情况,应用程序崩溃,因为它无法检查额外的存在与否

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean android.content.Intent.hasExtra(java.lang.String)”

我如何解决这个问题?谢谢大家

 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";

尝试此操作,注意此步骤中if条件的更改
intent
可能为空。您的代码还可能导致数据为空值。相反,您可以执行以下操作:

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

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

试试这个,谢谢,但在某些情况下,服务可以从其他活动而不是活动1重新启动。因此,您的解决方案无法解决我以前使用过的问题,但当我从其他活动启动服务时,它也会出现错误
尝试在空对象引用上调用虚拟方法“android.os.Bundle android.content.Intent.getExtras()”
,谢谢,但它也会出现错误
String android.content.Intent.getStringExtra(java.lang.String)'在空对象引用上
。假设一个简单的例子,活动1不是主活动和启动器活动。活动2是主要的。活动1和2都可以启动服务,但只有活动1可以发送数据。我不知道这是怎么可能的。您应该用它替换所有已发布的代码<代码>如果(intent!=null)
应该防止出现异常。