将 Object[] 转换为 ContentValues[] 时出错
Error casting Object[] to ContentValues[]
我正在学习有关内容提供者的教程,在特定代码中,他们使用 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.: 英文不是我的母语,如有错误请见谅。
不能将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]));
}
希望对您有所帮助。
我正在学习有关内容提供者的教程,在特定代码中,他们使用 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.: 英文不是我的母语,如有错误请见谅。
不能将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]));
}
希望对您有所帮助。