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



我看到了几个关于这方面的问题,但我找不到与我自己的问题有关的问题是什么。

我正在尝试使用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),但在rawCelLvlrawCelAsurawCelDbm(它们应该是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();

或者您可以将数组设置为一个类并传递类的对象

您还可以创建静态类,并用数据设置该类,这样您就可以直接接收数据,而无需传递该类的对象。

相关内容

  • 没有找到相关文章

最新更新