我正在关注内容提供商的教程,并且在特定代码中,他们使用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。:英语不是我的母语,请原谅任何错误。
答案 0 :(得分:3)
您无法将Object[]
投射到ContentValues[]
,因为这两种类型之间没有任何关系。它们是不同的数组类型。
就像你可以将Object
投射到这样的String
:
Object a = "aa";
String b = (String) a;
因为String
是Object
的子类。
但你不能这样做:
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]));
}
希望这可以帮到你。