Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在有意图的活动之间传递int[]数组时为Null_Android_Arrays_Android Intent_Null - Fatal编程技术网

Android 在有意图的活动之间传递int[]数组时为Null

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在一个服务和另一个活动之间传递几个整数数组。我还传递其他非数组的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);
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),但在rawCelLvlrawcellasurawcelldbm中总是有“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