我看到了几个关于这方面的问题,但我找不到与我自己的问题有关的问题是什么。
我正在尝试使用intents在一个服务和另一个活动之间传递几个整数数组。我还传递了其他不是数组的int值。我收到的所有数组都是"空"的,我不明白为什么
通过服务:
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),但在rawCelLvl、rawCelAsu和rawCelDbm(它们应该是logcat中所示的具有2个值的整数数组)中总是有"Null"。
有什么技巧可以解决这个问题吗?
编辑:
我试图在服务中更改我的代码如下:
Intent intent = new Intent(UPDATE_ALL);
Bundle extras = new Bundle();
extras.putIntegerArrayList(RAW_CELLVL, rawCellsLevel);
intent.putExtras(extras);
并在捕获活动中保持相同的代码,但结果仍然相同。你能帮我一点正确使用捆绑包的方法吗?
您的问题在这里:
intent.getExtras().getIntArray()->尝试从extrasbundle中检索数组。
您没有添加额外的捆绑包。你必须使用:
intent.getByteArrayExtra()->intent extras的streight
我建议您先将数据放入Bundle,然后将Bundle放入Intent,因为Bundle是作为数据容器创建的。你可以更容易地管理它们。
在这种情况下,您将从空的捆绑包中获取getIntArray(SensorService.RAW_CELLVL);
。
p.S:当你调用方法getExtras()
时,你会得到一个Bundle obj.
使用getIntArrayExtra(字符串名称)
int[] rawCelLvl = intent.getIntArrayExtra(SensorService.RAW_CELLVL);
int[] rawCelAsu = intent.getIntArrayExtra(SensorService.RAW_CELASU);
int[] rawCelDbm = intent.getIntArrayExtra(SensorService.RAW_CELDBM);
这就是我解决问题的方法:
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);
感谢所有回复、捆绑包上的线索以及"Extras"<>"额外"让我走上正轨!
检查数组,您尝试的单元格是否正确初始化。
int[] ints = new int[SIZE];
或
int[] ints = new int[]{1, 2, 3};
NPE表示没有阵列
如果使用Custom类,则必须序列化该类。即使用Serializable类实现类。如果这样做,您可以通过从意图传递数组
intent.putExtra();
或者您可以将数组设置为一个类并传递类的对象
您还可以创建静态类,并用数据设置该类,这样您就可以直接接收数据,而无需传递该类的对象。