我需要将一个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 []尝试了这个,并且两个错误都是以同样的方式。
在活动中
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 - 其他技术的良好起点。
答案 0 :(得分:3)
您需要从正在进行的捆绑中获取值
解决方案1
在意向服务中更改此内容
Bundle simBundle = intent.getBundleExtra("simBundle");
到
Bundle simBundle = intent.getExtras();
解决方案2 如果您将其他活动的额外值也发送到同一服务,则首选
在您的活动中更改此内容
inStartSim.putExtras(simBundle);
到
inStartSim.putExtra("simBundle", simBundle)