2016-08-05 45 views
2

Ich folge einem Lernprogramm zu Inhaltsanbietern und in einem bestimmten Code wurden einige Daten unter Verwendung einer bulkInsert-Methode eingefügt. Sie verwendeten auch eine Vektorvariable (cVVector), um alle ContentValues zu speichern.Fehler beim Darstellen von Objekt [] zu ContentValues ​​[]

Code, der erwähnt wurde:

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

Dann habe ich versucht, den Code zu reduzieren, indem cVVector.toArray()-ContentValues[] Gießen, aber ich erhalte eine Fehlermeldung.

-Code von mir bearbeitet:

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

Fehler, die ich bekomme:

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[] 

Schließlich ist meine Frage: Warum ich nicht ein Casting zwischen einem Object[] und einem ContentValues[] tun können ?

Obs .: Englisch ist nicht meine Muttersprache, bitte entschuldigen Sie irgendwelche Fehler.

Antwort

3

Sie können Object[] nicht in ContentValues[] umwandeln, da keine Beziehung zwischen diesen beiden Typen besteht. Sie sind verschiedene Array-Typen.

Genau wie Sie eine Object zu einem String wie diese werfen können:

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

weil String eine Unterklasse von Object ist.

Aber man kann dies nicht tun:

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

Sie finden diese in der Kompilierung OK ist, wird aber im laufenden Betrieb nicht funktionieren. Die erzwungene Typumwandlung in JAVA funktioniert möglicherweise nur für einzelnes Objekt nicht Array.

Sie können Ihren Code mit ersetzen:

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

Hope this Ihnen helfen können.

+0

Es hat sehr geholfen. Ich war verwirrt, weil ich dachte, dass das Casting das Array automatisch ausführen würde und jedes Objekt in das neue Array werfen würde. Aber wie du schon sagtest, sind 'Object []' und 'ContentValues ​​[]' unterschiedliche Array-Typen, so dass das Casting, das ich gemacht habe, niemals richtig funktionieren wird. Danke nochmal! –