尝试在空对象引用上调用虚拟方法 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)'
Attempt to invoke virtual method 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)' on a null object reference
我需要将 long[] 从 Activity 传递到 IntentService。创建一个Bundle,将数组存储在Bundle中,然后将Bundle添加到Intent中。在 IntentService 中,当我尝试提取 Bundle 时,我得到:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)' on a null object reference.
如您所见,我已经尝试过使用 long[] 和 String[] 并且都以相同的方式出错。
在Activity
String[] sAr = {"some", "times"};
// launch simulator threads using test parameters
Intent inStartSim = new Intent(this, SimService.class);
//inStartSim.setAction("TrigParm");
inStartSim.setAction("genData");
Bundle simBundle = new Bundle();
//simBundle.putByteArray(arSimConfig);
//simBundle.putLongArray("simConfigAr",arSim1Config);
simBundle.putStringArray("simConfigAr",sAr);
inStartSim.putExtras(simBundle);
startService(inStartSim);
在 IntentService 中
Bundle simBundle = intent.getBundleExtra("simBundle");
long[] simConfigParm;
String[] sAr;
//simConfigParm = simBundle.getLongArray("simConfigAr");
sAr = simBundle.getStringArray("simConfigAr");
在异常后钻入Bundle对象时,我确实注意到标识符不同:
Bundle[{simConfigAr=[J@5668b8a}] – in Simulator
Bundle[{simConfigAr=[J@f0d80de}] – in SimService
我知道还有许多其他方法可以在活动和服务之间移动数据,但这似乎是最简单的。 http://developer.android.com/guide/faq/framework.html#3 - 其他技术的良好起点。
您需要从要放入的包中获取值
解决方案 1
在您的意向服务中更改此项
Bundle simBundle = intent.getBundleExtra("simBundle");
到
Bundle simBundle = intent.getExtras();
解决方案 2 如果您要将来自其他 activity 的额外值也发送到同一服务
,则这是首选
在您的 Activity
中更改此项
inStartSim.putExtras(simBundle);
到
inStartSim.putExtra("simBundle", simBundle)
我需要将 long[] 从 Activity 传递到 IntentService。创建一个Bundle,将数组存储在Bundle中,然后将Bundle添加到Intent中。在 IntentService 中,当我尝试提取 Bundle 时,我得到:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)' on a null object reference.
如您所见,我已经尝试过使用 long[] 和 String[] 并且都以相同的方式出错。
在Activity
String[] sAr = {"some", "times"};
// launch simulator threads using test parameters
Intent inStartSim = new Intent(this, SimService.class);
//inStartSim.setAction("TrigParm");
inStartSim.setAction("genData");
Bundle simBundle = new Bundle();
//simBundle.putByteArray(arSimConfig);
//simBundle.putLongArray("simConfigAr",arSim1Config);
simBundle.putStringArray("simConfigAr",sAr);
inStartSim.putExtras(simBundle);
startService(inStartSim);
在 IntentService 中
Bundle simBundle = intent.getBundleExtra("simBundle");
long[] simConfigParm;
String[] sAr;
//simConfigParm = simBundle.getLongArray("simConfigAr");
sAr = simBundle.getStringArray("simConfigAr");
在异常后钻入Bundle对象时,我确实注意到标识符不同:
Bundle[{simConfigAr=[J@5668b8a}] – in Simulator
Bundle[{simConfigAr=[J@f0d80de}] – in SimService
我知道还有许多其他方法可以在活动和服务之间移动数据,但这似乎是最简单的。 http://developer.android.com/guide/faq/framework.html#3 - 其他技术的良好起点。
您需要从要放入的包中获取值
解决方案 1
在您的意向服务中更改此项
Bundle simBundle = intent.getBundleExtra("simBundle");
到
Bundle simBundle = intent.getExtras();
解决方案 2 如果您要将来自其他 activity 的额外值也发送到同一服务
,则这是首选在您的 Activity
中更改此项inStartSim.putExtras(simBundle);
到
inStartSim.putExtra("simBundle", simBundle)