9
votes

IllegalargumentException: colonne invalide

Voici le LOGCAT:

01-15 16:52:07.857: VERBOSE/TasksProvider(24325): Creating database...
01-15 16:52:07.862: VERBOSE/TasksProvider(24325): _id
01-15 16:52:07.862: VERBOSE/TasksProvider(24325): title
01-15 16:52:07.862: VERBOSE/TasksProvider(24325): completed
01-15 16:52:07.862: VERBOSE/TasksProvider(24325): due_date
01-15 16:52:07.862: VERBOSE/TasksProvider(24325): notes
01-15 16:52:07.862: VERBOSE/TasksProvider(24325): importance


4 commentaires

Qui est la ligne: 105? Tâche = getContentresolver (). Query (Uri, Projection, NULL, NULL, NULL);


À propos de - 'Colonne non valide dus_date'. Êtes-vous sûr à 100% qu'il y a une telle colonne?


Vérifiez la mise à jour. Je suis très sûr et j'ai une preuve de logcat que "dus_date" existe.


Pourquoi les trois dernières valeurs de la projection sont-elles définies avec «comme»? Peut-être que ces valeurs sont des entiers / longs?


3 Réponses :


9
votes

J'ai trouvé une solution étrange à cela. Dans String [] Projection Code>. Vous devez faire:

private String[] PROJECTION { 
    Tasks._ID, 
    Tasks.TITLE, 
    Tasks.COMPLETED,
    Tasks.DUE_DATE + " as " + Tasks.DUE_DATE, 
    Tasks.IMPORTANCE + " as " + Tasks.DUE_DATE, 
    Tasks.NOTES + " as " + Tasks.NOTES
};


0 commentaires

0
votes

Avez-vous ajouter cette colonne dans la carte de projection du fournisseur de contenu, par rapport à la table avec cette colonne? J'espère que cela vous aidera.


0 commentaires

18
votes

La colonne existe sans aucun doute dans votre base de données, mais si vous n'avez pas ajouté la colonne à une chose appelée la carte projection , vous obtiendrez la "colonne invalide" que vous voyez. . Vous pouvez ajouter la carte de projection via un objet Builder de requête, comme celui-ci: XXX

Pour comprendre ce qui se passe, regardez la source de la classe SQLITEQUERYBUILDER, et vous verrez ce qui suit: xxx

Il est essentiellement en train de vérifier les colonnes que vous avez demandées dans votre projection sur une liste de colonnes "autorisées" et que vous pouvez voir que si la carte ne contient pas la colonne de votre projection, elle Je vais lancer une idée illegalargumentException, tout comme vous l'avez vu. (J'imagine que cette vérification sur la carte est une fonctionnalité de sécurité pour empêcher les attaques SQL à partir de personnes qui abusent de votre fournisseur de contenu, mais c'est juste une supposition.)

Notez également que si vous définissez des cartes de projection "strictes". dans votre constructeur de requêtes: xxx

puis dans ce cas, il s'attend à ce que vous connaissiez les noms de colonne exacts ... Si vous ne le définissez pas, il vérifie le "comme "Alias ​​de colonne - Je pense que cela explique la" solution bizarre "que vous avez découverte.

espère que cela aide.


0 commentaires