我有以下代码:在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循环从列表复制到数组。