2016-08-05 1 views
2

Je suis un didacticiel sur les fournisseurs de contenu et, dans un code spécifique, ils ont inséré des données en utilisant une méthode bulkInsert. Ils ont également utilisé une variable Vector (cVVector) pour stocker tous les ContentValues.Erreur lors de la conversion de Object [] en ContentValues ​​[]

code

qui a été mentionné:

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

Ensuite, j'ai essayé de réduire le code par coulée cVVector.toArray()-ContentValues[], mais je me fais une erreur.

code édité par moi:

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

erreur que je reçois:

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

Enfin, ma question est: Pourquoi je ne peux pas faire une coulée entre un Object[] et un ContentValues[] ? Observations: L'anglais n'est pas ma langue maternelle, veuillez excuser toutes les erreurs.

Répondre

3

Vous ne pouvez pas convertir Object[] en ContentValues[], car il n'existe aucune relation entre ces deux types. Ce sont des types de tableau différents.

comme vous pouvez jeter un coup Object à un String comme ceci:

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

parce String est une sous-classe de Object.

Mais vous ne pouvez pas faire ceci:

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

Vous trouverez c'est OK dans la compilation, mais ne fonctionnera pas dans l'exécution. La conversion de type forcé dans JAVA ne peut fonctionner que pour un seul objet et non pour un tableau.

Vous pouvez remplacer votre code avec:

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

espère que cela peut vous aider.

+0

Ça m'a beaucoup aidé. Je me suis perdu, parce que je pensais que la distribution lancerait le tableau automatiquement, en jetant chaque objet dans le nouveau tableau. Mais, comme vous l'avez dit, 'Object []' et ContentValues ​​[] 'sont des types de tableau différents, donc le casting que j'ai fait ne fonctionnera jamais correctement. Merci encore! –