将Object []转换为ContentValues []时出错

时间:2016-08-05 21:49:03

标签: android casting content-values

我正在关注内容提供商的教程,并且在特定代码中,他们使用bulkInsert方法插入了一些数据。他们还使用Vector变量(cVVector)来存储所有ContentValues

提到的代码:

if (cVVector.size() > 0) {
   ContentValues[] cvArray = new ContentValues[cVVector.size()];
   cVVector.toArray(cvArray);
   mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, cvArray);
}

然后,我尝试通过将cVVector.toArray()投射到ContentValues[]来减少代码,但我收到了错误。

我编辑的代码:

if (cVVector.size() > 0) {
   mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, (ContentValues[]) cVVector.toArray());
}

我收到的错误:

FATAL EXCEPTION: AsyncTask #1
Process: com.example.thiago.sunshine, PID: 9848
java.lang.RuntimeException: An error occured while executing doInBackground()
...
Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to android.content.ContentValues[]

最后,我的问题是:为什么我不能在Object[]ContentValues[]之间进行投射?

Obs。:英语不是我的母语,请原谅任何错误。

1 个答案:

答案 0 :(得分:3)

您无法将Object[]投射到ContentValues[],因为这两种类型之间没有任何关系。它们是不同的数组类型。

就像你可以将Object投射到这样的String

Object a = "aa";
String b = (String) a;

因为StringObject的子类。

但你不能这样做:

Object[] ar = new Object[]{"aa", "bb"};
String[] br = (String[]) ar;

您会发现在编译时这是正常的,但在运行时无效。 JAVA中的强制类型转换可能仅适用于单个对象而非数组。

您可以使用以下代码替换代码:

if (cVVector.size() > 0) {
   mContext.getContentResolver().bulkInsert(WeatherEntry.CONTENT_URI, (ContentValues[]) cVVector.toArray(new ContentValues[1]));
}

希望这可以帮到你。