尝试调用虚方法' java.lang.String [] android.os.Bundle.getStringArray(java.lang.String)'在null对象引用上

时间:2015-01-30 15:57:26

标签: java android nullpointerexception

我需要将一个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 - 其他技术的良好起点。

1 个答案:

答案 0 :(得分:3)

您需要从正在进行的捆绑中获取值

解决方案1 ​​

在意向服务中更改此内容

Bundle simBundle = intent.getBundleExtra("simBundle");

Bundle simBundle = intent.getExtras();

解决方案2 如果您将其他活动的额外值也发送到同一服务,则首选

在您的活动中更改此内容

inStartSim.putExtras(simBundle);

inStartSim.putExtra("simBundle", simBundle)