Aller au contenu

[RESOLU]Problème SimpleCursorAdapter


Hhugues

Recommended Posts

Bonjour à tous et à toutes.

(Note aux modérateurs : Si jamais je me trompe de section, n'hésitez pas à me déplacer ce sujet, merci)

Je suis actuellement en trian de développer une petite application pour m'entraîner qui calcule la somme des consommations dans un bar.

Pour cela je me suis appuyé sur l'application Notepad qui a été gracieusement fournie par Google.

Mon application se présente de la sorte (architecture générale):

une tabActivity.

Première Tab : "Résumé", où toutes les différentes informations sont affichées : prix total, etc..

Deuxième tab: là ça se corse "liste des consommations". Me demandez pas pourquoi j'ai crée une nouvelle activity quand on clique dessus et ça affiche la liste des consommation sur le même mode que Notepad.

Donc je procède de même. quand cette activité est lancée je crée une table SQL Lite, muni de 5 champs différents, la création se passe bien (vu grâce au debuggage). Puis viens le temps du premier affichage... c'est là que ça coince. J'utilise un .FetchAllConso() pour rapatrier un Cursor. Là aussi le Cursor est bien initialisé je vois bien mes 5 champs que j'ai créés etc...


Cursor notesCursor = mTableConso.fetchAllConso();

startManagingCursor(notesCursor);

String[] from = new String[]{TableConsommation.TABLE_QUANTITE);
int[] to = new int[]{R.id.text1}

SimpleCursorAdapter conso = new SimpleCursorAdapter(this,R.Layout.notes_row, notesCursor, from,to)

Puis vient la conversion en SimpleCursor (cf plus haut) et là... c'est le drame, plantage sans Exception que je peux catcher. Je ne sais vraiment pas d'où vient le problème et Eclipse n'est pas très loquace dessus. Il est à noter que si je mets null à la place de notesCursor il n'y a aucun soucis !

Voilà s'il y a des as de la programmation sous Android qui peuvent me renseigner, parce quej e bloque totalement !

Merci beaucoup

Modifié par Hhugues
Lien vers le commentaire
Partager sur d’autres sites

bein déjà dans la doc du Simplecursor je ne trouve pas de SimpleCursor....mais j ai bien un SimpleCursorAdapter

donc déjà évite les erreur de recopie ça peut aider pour qu'on t'aide ^^

ensuite est ce que dans le layout notes_row il y a bien un textview text1....

et sinon envoie ici le mesage de l exception dans le logcat....il est forcément explicite.

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, SimpleCursor ça me parle pas. Mais c'est bizzare que Eclipse ne dise rien.

Ensuite, pour les exceptions incatchables, c'est que ce n'est pas une exception, mais une error :)

Tu peux faire un truc du genre (ou catcher carrement Throwable et recuperer les deux)

try{
...
} catch (Error e) {
  Log.d("tag", "BOUM !", e);
}

Les errors ne sont normalement pas à catcher, parce que ça aurait du être vu à la compilation. La dans ton cas, grande chance qu'il te dise qu'il ne trouve pas la classe SimpleCursor (surement une NoClassDefFoundError).

D'ailleurs, si c'est un copier coller direct du code, il te manque des ';' :)

Ca me semble bien sinon.

Lien vers le commentaire
Partager sur d’autres sites

Oups my bad :).

Voilà j'ai corrigé en effet je parle bien d'un SimpleCursorAdapter (désolé faute de frappe car je programme pas avec le même ordinateur que celui avec lequel je vais sur le net, je recopie comme un idiot).

Alors... tout d'abord je vous remercie pour vos (rapides) réponses, mais je ne sais pas où trouver ce logcat. Est-il fourni avec eclipse ou cela fait-il partie du SDK d'android (et dans ce cas, où le trouver ?)

Je précise mon erreur. Elle ne se passe pas au niveau de la compilation qui passe sans soucis, mais de l'éxécution, et c'est ça qui me gène. Tout a l'air de fonctionner normalement (mon Cursor est valide et non null, il possède les bonnes informations, autant que je puisse en juger) puis POUF! erreur et le programme est forcé de quitter.

@popolbx :

Oui il y a bien tout ce qui faut dans les docs xml à priori, pas de soucis de côté là, mais je pense que de toute façon Eclipse me gueulerait dessus avant même la compilation :).

_________

Le programme plante dans à la ligne :

SimpleCursorAdapter conso = new SimpleCursorAdapter(this,R.Layout.notes_row, notesCursor, from,to)

et cela vient du notesCursor à priori car s'il est vide l'affichage se passe correctement (il affiche : pas de conso).

Merci encore, désolé pour les coquilles !

Modifié par Hhugues
Lien vers le commentaire
Partager sur d’autres sites

Pour le logcat, il fait parti du SDK en effet

Tu vas dans la perspective DDMS (Windows ===> Open Perspective ===> DDMS)

Puis tu ouvres la fenêtre Logcat (si elle est pô déja ouverte : Windows ===> Show View ===> Logcat) et tu click sur ton émulateur dans la liste en haut à gauche (par défaut)

Et dans le logcat tu devrais avoir l'erreur qui s'affiche :)

Dis nous ce que ça dis ;)

Lien vers le commentaire
Partager sur d’autres sites

Je vous fais ça dès que je rentre avec ma machine de boulot. Petite question cependant, pour que Logcat fonctionne correctement je dois être absolument en mode debug ?

et aussi je viens de le lancer (mais je peux pas encore vous le copier ici), j'ai une longue liste d'erreurs et à la fin y'a : "...30 more"

Est-il possible d'avoir les 30 autres ?

Je vous remercie

Lien vers le commentaire
Partager sur d’autres sites

Voici le long logcat !


09-07 19:08:58.942: WARN/WindowManager(568): Dispatch state: {{KeyEvent{action=1 code=82 repeat=0 meta=0 scancode=229 mFlags=8} to Window{436a6020 Keyguard paused=false} @ 1252350476984 lw=Window{436a6020 Keyguard paused=false} lb=android.view.ViewRoot$W@436a5ce8 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false}}}
09-07 19:08:58.951: WARN/WindowManager(568): Current state:  {{null to Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false} @ 1252350538952 lw=Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false} lb=android.os.BinderProxy@435ee650 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false}}}
09-07 19:08:58.951: WARN/WindowManager(568): Continuing to wait for key to be dispatched
09-07 19:09:03.970: WARN/WindowManager(568): Key dispatching timed out sending to victor.app/victor.app.ethylomaitre
09-07 19:09:03.981: WARN/WindowManager(568): Dispatch state: {{KeyEvent{action=1 code=82 repeat=0 meta=0 scancode=229 mFlags=8} to Window{436a6020 Keyguard paused=false} @ 1252350476984 lw=Window{436a6020 Keyguard paused=false} lb=android.view.ViewRoot$W@436a5ce8 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false}}}
09-07 19:09:03.990: WARN/WindowManager(568): Current state:  {{null to Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false} @ 1252350543992 lw=Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false} lb=android.os.BinderProxy@435ee650 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{436a3f30 victor.app/victor.app.ethylomaitre paused=false}}}
09-07 19:09:04.001: WARN/WindowManager(568): Continuing to wait for key to be dispatched
09-07 19:09:07.953: DEBUG/AndroidRuntime(718): Shutting down VM
09-07 19:09:07.961: WARN/dalvikvm(718): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
09-07 19:09:07.961: ERROR/AndroidRuntime(718): Uncaught handler: thread main exiting due to uncaught exception
09-07 19:09:08.581: ERROR/AndroidRuntime(718): java.lang.RuntimeException: Unable to start activity ComponentInfo{victor.app/victor.app.AffichageConso}: java.lang.IllegalArgumentException: column 'L' does not exist
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2112)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:600)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.widget.TabHost.setCurrentTab(TabHost.java:310)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:126)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:268)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.View.performClick(View.java:2179)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.View.onTouchEvent(View.java:3828)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.View.dispatchTouchEvent(View.java:3368)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:831)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.Activity.dispatchTouchEvent(Activity.java:1993)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1525)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.os.Looper.loop(Looper.java:123)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.ActivityThread.main(ActivityThread.java:3948)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at java.lang.reflect.Method.invokeNative(Native Method)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at java.lang.reflect.Method.invoke(Method.java:521)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at dalvik.system.NativeStart.main(Native Method)
09-07 19:09:08.581: ERROR/AndroidRuntime(718): Caused by: java.lang.IllegalArgumentException: column 'L' does not exist
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:336)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.widget.SimpleCursorAdapter.(SimpleCursorAdapter.java:88)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at victor.app.AffichageConso.fillData(AffichageConso.java:42)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at victor.app.AffichageConso.onCreate(AffichageConso.java:23)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
09-07 19:09:08.581: ERROR/AndroidRuntime(718):     ... 30 more
09-07 19:09:09.061: INFO/Process(568): Sending signal. PID: 718 SIG: 3
09-07 19:09:09.061: INFO/dalvikvm(718): threadid=7: reacting to signal 3
09-07 19:09:09.261: INFO/dalvikvm(718): Wrote stack trace to '/data/anr/traces.txt'

Lien vers le commentaire
Partager sur d’autres sites

je viens moi même de jeter un coup d'oeil je vois pas où il y a une colonne "L" ?..

09-07 19:09:08.581: ERROR/AndroidRuntime(718): java.lang.RuntimeException: Unable to start activity ComponentInfo{victor.app/victor.app.AffichageConso}: java.lang.IllegalArgumentException: column 'L' does not exist

Quelqu'un aurait-il une idée de ce que c'est ?

Merci

Lien vers le commentaire
Partager sur d’autres sites

je viens moi même de jeter un coup d'oeil je vois pas où il y a une colonne "L" ?..

09-07 19:09:08.581: ERROR/AndroidRuntime(718): java.lang.RuntimeException: Unable to start activity ComponentInfo{victor.app/victor.app.AffichageConso}: java.lang.IllegalArgumentException: column 'L' does not exist

Quelqu'un aurait-il une idée de ce que c'est ?

Merci

Justement, c'est la colonne qu'il te manque dans ton dbAdapter :o

Vérifie le nom de tes colonnes (si je me souviens bien du Tuto Notepad, les colonnes sont en static KEY_...) et ta chaîne de création de table

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je reviens vers vous car en effet j'avais fait une coquille dans la création de la table. A la création j'initilisais un String DATABASE_CREATE avec "L text not null" qui devaient correspondre à la quantité.

Mais dans la liste de mes variables j'avais un :

public static final String COLONNE_QUANTITE="quantite"

Cette erreur a pu être rectifiée en remplaçant le L par quantite !

j'espère que cela pourra être utile à quelqu'un d'autre que moi qui se demande pourquoi sa table réagit bizarrement :)

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Bonjour,

Il se trouve que j'ai EXACTEMENT le même soucis (voilà pourquoi je n'ouvre pas un nouveau sujet) mais je ne vois vraiment pas où est l'erreur... Le Logcat me trouve aussi une erreur à une colonne (pour moi appelée "_id") alors que je n'ai repéré aucune colonne _id ni dans ma table, ni dans mes variables... oO

02-22 10:30:16.139: ERROR/AndroidRuntime(368): java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.site.android/fr.site.android.Onglets}: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.site.android/fr.site.android.L_Personnes}: java.lang.IllegalArgumentException: column '_id' does not exist

Lien vers le commentaire
Partager sur d’autres sites

Problème classique d'utilisation d'un CursorAdapter qui utilise un Cursor qui ne retourne pas de colonne _id. Pour fonctionner, un CursorAdapter a besoin d'une colonne _id dans les résultats, cette colonne étant typiquement la clef primaire de la table

Lien vers le commentaire
Partager sur d’autres sites

Problème classique d'utilisation d'un CursorAdapter qui utilise un Cursor qui ne retourne pas de colonne _id. Pour fonctionner, un CursorAdapter a besoin d'une colonne _id dans les résultats, cette colonne étant typiquement la clef primaire de la table

La clé primaire ne peut donc avoir de nom différent que "_id" ? :/

EDIT : J'ai trouvé ma réponse dans cet article, merci pour ton aide !

Modifié par jok
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...