通过intent传递Double Array传递null



我有以下代码:在TrackerActivity

ArrayList<Double> latitudes;
ArrayList<Double> longitudes;
ArrayList<Double> altitudes;
...
Intent intent = new Intent(this, SummaryActivity.class);
intent.putExtra(LATITUDES_EXTRA, latitudes.toArray());
intent.putExtra(LONGITUDES_EXTRA, longitudes.toArray());
intent.putExtra(ALTITUDES_EXTRA, altitudes.toArray());
startActivity(intent);

和in SummaryActivity:

latitudes = getIntent().getDoubleArrayExtra(TrackerActivity.LATITUDES_EXTRA);
longitudes = getIntent().getDoubleArrayExtra(TrackerActivity.LONGITUDES_EXTRA);
altitudes = getIntent().getDoubleArrayExtra(TrackerActivity.ALTITUDES_EXTRA);
但是

都是空的。会出什么问题呢?

Bundle类有传递和检索双精度类型数组的方法:

 - void putDoubleArray(String, double[])
 - double [] getDoubleArray(String)

可能会对你有所帮助

试一试:

TrackerActivity

Intent intent = new Intent(this, SummaryActivity.class);
intent.putExtra(LATITUDES_EXTRA, latitudes);
intent.putExtra(LONGITUDES_EXTRA, longitudes);
intent.putExtra(ALTITUDES_EXTRA, altitudes);
startActivity(intent);

SummaryActivity

latitudes = getIntent().getExtras().getParcelableArrayList(TrackerActivity.LATITUDES_EXTRA);
longitudes = getIntent().getExtras().getParcelableArrayList(TrackerActivity.LONGITUDES_EXTRA);
altitudes = getIntent().getExtras().getParcelableArrayList(TrackerActivity.ALTITUDES_EXTRA);

为什么这个工作?在Java中,从原语到对象的转换是微不足道的,这要归功于一个叫做自动装箱的特性,Oracle当前的文档是这样写的:

自动装箱是Java编译器在基本类型和它们对应的对象包装类之间进行的自动转换。例如,将int型转换为Integer型,将double型转换为double型,等等。如果转换方向相反,则称为拆箱。

您需要将每个ArraryList<Double>转换为double[]。问题是ArraryList.toArray()返回的是Double[]。您可以将列表声明为数组开始,也可以编写一个小的for循环从列表复制到数组。

最新更新