在具有intent的活动之间传递int []数组时为空

时间:2017-01-02 18:38:34

标签: android arrays android-intent null

我已经看到了几个关于此的问题,但我找不到与我自己的问题相关的问题。

我试图使用意图在服务和另一个活动之间传递几个整数数组。我也传递不是数组的其他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吗?

6 个答案:

答案 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; “额外”让我走上正轨!