我已经看到了几个关于此的问题,但我找不到与我自己的问题相关的问题。
我试图使用意图在服务和另一个活动之间传递几个整数数组。我也传递不是数组的其他int值。我的所有数组都是" Null"收到后,我不明白为什么
传递服务:
Intent intent = new Intent(UPDATE_ALL);
intent.putExtra(RAW_CELLS, rawCells);
intent.putExtra(RAW_CELLVL, rawCellsLevel);
intent.putExtra(RAW_CELASU, rawCellsAsuLevel);
intent.putExtra(RAW_CELDBM, rawCellsDbm);
捕捉活动:
Log.d("MainActivity", "intent.getExtras()="+intent.getExtras());
int rawCellsTotal = intent.getIntExtra(SensorService.RAW_CELLS, 0);
int[] rawCelLvl = intent.getExtras().getIntArray(SensorService.RAW_CELLVL);
int[] rawCelAsu = intent.getExtras().getIntArray(SensorService.RAW_CELASU);
int[] rawCelDbm = intent.getExtras().getIntArray(SensorService.RAW_CELDBM);
从Log.d行,我可以在logcat中看到这个:
Bundle[{com.myapp.MyService.RAW_CELASL=[29, 7], com.myapp.MyService.RAW_CELDBM=[-111, -133], com.myapp.MyService.RAW_CELLVL=[2, 1], com.myapp.MyService.RAW_CELLS=2}]
然后当我调试代码时,我可以在 rawCellsTotal 中得到一个值,它不是一个数组而是一个简单的整数(例如2),但是我总是有' Null'在 rawCelLvl , rawCelAsu , rawCelDbm 中,它们应该是具有2个值的整数数组,如logcat所示。
有任何提示要解决此问题吗?
修改
我尝试在服务中更改我的代码:
Intent intent = new Intent(UPDATE_ALL);
Bundle extras = new Bundle();
extras.putIntegerArrayList(RAW_CELLVL, rawCellsLevel);
intent.putExtras(extras);
并在捕获活动中保留相同的代码,但结果仍然相同。你能帮我正确使用Bundle吗?
答案 0 :(得分:1)
您的问题在这里:
intent.getExtras()。getIntArray() - >尝试从extras包中检索数组。
你没有添加额外的捆绑包。你必须使用:
intent.getByteArrayExtra() - >来自意图的额外内容
答案 1 :(得分:1)
我建议你将数据放入Bundle然后将bundle放入Intent,因为Bundle被创建为数据容器。您可以更轻松地管理它们。
在你的情况下,你从空包中得到getIntArray(SensorService.RAW_CELLVL);
。
P.S:当你调用方法getExtras()
时,你得到一个Bundle obj。
答案 2 :(得分:1)
使用getIntArrayExtra(String name)
int[] rawCelLvl = intent.getIntArrayExtra(SensorService.RAW_CELLVL);
int[] rawCelAsu = intent.getIntArrayExtra(SensorService.RAW_CELASU);
int[] rawCelDbm = intent.getIntArrayExtra(SensorService.RAW_CELDBM);
答案 3 :(得分:0)
检查该数组,尝试正确初始化单元格。
int[] ints = new int[SIZE];
或
int[] ints = new int[]{1, 2, 3};
NPE表示没有数组
答案 4 :(得分:0)
如果您使用的是Custom类,则必须序列化该类。即使用Serializable类实现类。如果这样做,你可以通过
从意图传递数组intent.putExtra();
或者您可以将该数组设置为一个类并传递该类的对象
您还可以创建静态类并使用您的数据设置该类,以便您可以直接接收数据而无需传递该类的对象。
答案 5 :(得分:0)
这就是我解决问题的方法:
intent.putExtra(RAW_CELLVL, rawCellsAsuLevel);
intent.putExtra(RAW_CELASU, rawCellsAsuLevel);
intent.putExtra(RAW_CELDBM, rawCellsDbm);
在接收活动中:
ArrayList<Integer> rawCelLvl = intent.getIntegerArrayListExtra(SensorService.RAW_CELLVL);
ArrayList<Integer> rawCelAsu = intent.getIntegerArrayListExtra(SensorService.RAW_CELASU);
ArrayList<Integer> rawCelDbm = intent.getIntegerArrayListExtra(SensorService.RAW_CELDBM);
感谢所有回复,Bundle上的线索以及“Extras”&lt;&gt; “额外”让我走上正轨!