Android 在有意图的活动之间传递int[]数组时为Null
我看到了一些关于这方面的问题,但我找不到与我自己的问题相关的问题 我试图使用intent在一个服务和另一个活动之间传递几个整数数组。我还传递其他非数组的int值。我所有的数组在收到时都是空的,我不明白为什么 过境服务:Android 在有意图的活动之间传递int[]数组时为Null,android,arrays,android-intent,null,Android,Arrays,Android Intent,Null,我看到了一些关于这方面的问题,但我找不到与我自己的问题相关的问题 我试图使用intent在一个服务和另一个活动之间传递几个整数数组。我还传递其他非数组的int值。我所有的数组在收到时都是空的,我不明白为什么 过境服务: Intent intent = new Intent(UPDATE_ALL); intent.putExtra(RAW_CELLS, rawCells); intent.putExtra(RAW_CELLVL, rawCellsLevel); intent.putExtra(RA
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);
ArrayList<Integer> rawCelLvl = intent.getIntegerArrayListExtra(SensorService.RAW_CELLVL);
ArrayList<Integer> rawCelAsu = intent.getIntegerArrayListExtra(SensorService.RAW_CELASU);
ArrayList<Integer> rawCelDbm = intent.getIntegerArrayListExtra(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,rawcellasu,rawcelldbm中总是有“Null”,它们应该是具有2个值的整数数组,如logcat所示
有什么建议可以解决这个问题吗
编辑:
我尝试在服务中更改代码,如下所示:
Intent intent = new Intent(UPDATE_ALL);
Bundle extras = new Bundle();
extras.putIntegerArrayList(RAW_CELLVL, rawCellsLevel);
intent.putExtras(extras);
并在捕获活动中保持相同的代码,但仍然保持相同的结果。您能帮助我正确使用该捆绑包吗?您的问题是:
intent.getExtras().getIntArray()->尝试从extras捆绑中检索数组
您没有添加附加包。您必须使用:
intent.getByteArrayExtra()->streight从intent附加程序检查数组,您尝试的单元格已正确初始化
int[] ints = new int[SIZE];
或
NPE意味着没有数组我建议您将数据放入一个Bundle中,然后将该Bundle放入Intent中,因为Bundle被创建为数据的容器。您可以更轻松地管理它们 在您的情况下,您将获得
getIntArray(SensorService.RAW\u CELLVL)代码>来自为空的捆绑包
注意:当您调用方法getExtras()
时,您会得到一个Bundle obj 使用getIntArrayExtra(字符串名称)
如果您使用的是自定义类,则必须序列化该类。i、 e使用可序列化类实现类。若这样做了,您可以通过
intent.putExtra();
或者,您可以将该数组设置为类并传递该类的对象
您还可以创建静态类并使用数据设置该类,这样您就可以直接接收数据,而无需传递该类的对象。我就是这样解决这个问题的:
intent.putExtra(RAW_CELLVL, rawCellsAsuLevel);
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);
ArrayList<Integer> rawCelLvl = intent.getIntegerArrayListExtra(SensorService.RAW_CELLVL);
ArrayList<Integer> rawCelAsu = intent.getIntegerArrayListExtra(SensorService.RAW_CELASU);
ArrayList<Integer> rawCelDbm = intent.getIntegerArrayListExtra(SensorService.RAW_CELDBM);
ArrayList rawCelLvl=intent.getIntegerArrayListExtra(SensorService.RAW\u CELLVL);
ArrayList rawCelAsu=intent.getIntegerArrayListExtra(SensorService.RAW_CELASU);
ArrayList rawCelDbm=intent.getIntegerArrayListExtra(SensorService.RAW\u CELDBM);
感谢所有的回复,关于捆绑包的线索,以及“额外的”“额外的”这一事实让我走上了正确的轨道 我添加了一些我在问题中尝试过的更改,您能帮助我获得正确的Bundle语法吗?当然,当您想将数据放入Bundle中时,如果是字符串,可以使用:'Bundle.putString(“VarName”,stryuwanttopass)”,如果是整数,可以使用Bundle.putInt(“VarName1”,5)。要从Bundle中获取数据,您可以使用get方法,例如:String str=Bundle.getString(“varName”),int number=Bundle.getInt(“VarName1”)。非常感谢,我今天早上解决了这个问题,与您的建议非常类似,但改用ArrayList