Hhugues Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 (modifié) 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é 9 septembre 2009 par Hhugues Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Jorodan Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 Re rédige ton titre pour qu'il résume en 3 mots le problème! Merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ayarnaud Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 Je suis loin d'être un as en dév. androïd mais je peux toujours essayer de t'aider... Ca plante à quel niveau ? A cette ligne ? startManagingCursor(notesCursor); Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Max_well Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 Comme l'a dit Popolbx, le logcat est très important (Perspective DDMS et vue logcat), perso c'est ce que je regarde le plus ! D'après ce que tu as copié / coller, ça vient effectivement du SimpleCursor mais dans ce cas là Eclipse aurait du te le dire :o Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 7 septembre 2009 Auteur Share Posté(e) 7 septembre 2009 (modifié) 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é 7 septembre 2009 par Hhugues Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 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 ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 7 septembre 2009 Auteur Share Posté(e) 7 septembre 2009 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Max_well Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 Je pense que ce n'est pas une liste d'erreur mais la trace d'appel de l'exception. En gros tout ce qu'il y a après la premiere ligne (ce qui commence par "at ...") c'est juste l'enchainement des methodes qui sont arrivés à l'erreur. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 7 septembre 2009 Auteur Share Posté(e) 7 septembre 2009 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' Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 7 septembre 2009 Auteur Share Posté(e) 7 septembre 2009 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 7 septembre 2009 Share Posté(e) 7 septembre 2009 bein t es sur que tu ne te trompe pas dans le nom de la colonne : TableConsommation.TABLE_QUANTITE contient bien un nom.... ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 8 septembre 2009 Share Posté(e) 8 septembre 2009 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 8 septembre 2009 Share Posté(e) 8 septembre 2009 La suite au prochain numéro. ........ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 8 septembre 2009 Auteur Share Posté(e) 8 septembre 2009 merci pour vos réponses je vais vérifier ça ! C'est très sympa de filer un coup de main à un débutant en tout cas ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Hhugues Posté(e) 9 septembre 2009 Auteur Share Posté(e) 9 septembre 2009 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 :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 10 septembre 2009 Share Posté(e) 10 septembre 2009 Content qu'on ait pu t'aider :) N'hésite pô à poster si tu as un souci Bon courage pour la suite ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
jok Posté(e) 22 février 2011 Share Posté(e) 22 février 2011 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 22 février 2011 Share Posté(e) 22 février 2011 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
jok Posté(e) 23 février 2011 Share Posté(e) 23 février 2011 (modifié) 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é 23 février 2011 par jok Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.