2016-08-05 8 views
2

コンテンツプロバイダに関するチュートリアルに続き、特定のコードでbulkInsertメソッドを使用してデータを挿入しました。また、Vector変数(cVVector)を使用してContentValuesをすべて格納しました。言及されたObject []をContentValues []にキャストする際のエラー

コード:

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

その後、私はContentValues[]cVVector.toArray()をキャストすることにより、コードを削減しようとしたが、私はエラーを取得しています。私が編集し

コード:私は取得しています

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:英語は母国語ではありません。間違いをお許しください。

答えて

3

Object[]ContentValues[]は、これら2つのタイプ間に関係がないため、キャストできません。それらは異なる配列型です。 StringObjectのサブクラスであるため、

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

:あなたはこのようなStringObjectをキャストすることができます同じように

しかし、あなたはこれを行うことはできません。

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

あなたは、これはコンパイル時でOKであるでしょうが、実行時には動作しません。 JAVAの強制型変換は、配列ではなく単一のオブジェクトに対してのみ機能します。

あなたがして、あなたのコードを置き換えることができます。

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

が、これはあなたを助けることができる願っています。

+0

多くの手助けをしました。私はキャスティングが自動的に配列を実行し、各オブジェクトを新しい配列にキャストすると思っていたので、混乱しました。しかし、あなたが言ったように、 'Object []'と 'ContentValues []'は異なる配列型であるため、私が行ったキャストは決して正しく動作しません。ありがとうございました! –

関連する問題