如何检查putExtra是否存在?

Jam*_*ame 1 android bundle android-intent

我的图表如下

Activity 1 --send data--> Service1
                            ^
                            |
Open app--------------------
                            ^
                            |
Activity 2------------------
Run Code Online (Sandbox Code Playgroud)

这意味着活动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);
Run Code Online (Sandbox Code Playgroud)

在onStartCommand()中 Service 1

 String data=null;
 if(intent.hasExtra("data")){
    Bundle bundle = intent.getExtras();
    if(!bundle.getString("data").equals(null)){
        data= bundle.getString("data");
    }
  }
  else
       data="0";
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ak9*_*637 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";
Run Code Online (Sandbox Code Playgroud)

试试这个,注意条件的变化