如何检查 putExtra 是否存在?

How to check if the putExtra exist?

我有如下图

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

表示activity1会将数据发送给一个Service 1。Service 1是一个运行后台服务,return在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中,如果我们不从Activity 1开始,例如,当我清理所有运行应用程序时,phone将自动打开服务1,因为START_STICKY,服务 1 将设置数据等于“0”。因此,我的问题来自第二种情况,应用程序崩溃是因为它无法检查 Extra 是否存在。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.hasExtra(java.lang.String)' on a null object reference

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

 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