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()中返回isSTART\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)
应该防止出现异常。