Salut à tous!
J'me permet de posté ici car je suis dans une impasse
Je fais pour l'instant ma première appli pour android (pour les Xperia précisément)
J'me retrouve bloqué au niveau d'une fonction que j'ai faite,
Eclips ne voit aucun soucis, permet le déploiment de l'appli sur mon téléphone, mais impossible de lancer l'application, j'ai le droit à un 'L'application c'est arreter' directement...
Voici la fonction
public Intent clignote (){
final Switch pulseswitch = (Switch) findViewById(R.id.switchpulse);
if (pulseswitch.isChecked())
{Intent intent = new Intent(IlluminationIntent.ACTION_START_LED);
intent.putExtra(IlluminationIntent.EXTRA_LED_COL
OR,
couleur);
intent.putExtra(IlluminationIntent.EXTRA_LED_ID,
IlluminationIntent.VALUE_BUTTON_RGB);
intent.putExtra(IlluminationIntent.EXTRA_PACKAGE
_NAME,
"com.led.xperia");
return intent;}
else {
Intent intent = new Intent(IlluminationIntent.ACTION_START_LED_PULSE );
intent.putExtra(IlluminationIntent.EXTRA_LED_ID, IlluminationIntent.VALUE_BUTTON_RGB);
intent.putExtra(IlluminationIntent.EXTRA_LED_COLOR
,
couleur);
intent.putExtra(IlluminationIntent.EXTRA_LED_PULSE
_ON_TIME,
100);
intent.putExtra(IlluminationIntent.EXTRA_LED_PULSE
_OFF_TIME,
100);
intent.putExtra(IlluminationIntent.EXTRA_LED_NO_OF
_PULSES,
100);
intent.putExtra(IlluminationIntent.EXTRA_PACKAGE_N
AME,
"com.led.xperia");
return intent;
}
}
J'arrives vraiment pas à pigé l'erreur
Si quelqu'un a une idée, je suis preneur!
http://pastebin.com/vPHF5eCL
Je l'ai mis ici aussi pour plus de visibilité!
Merci & bonne soirée
Salut!
Alors, pour commencer, tu dois bien avoir une activité de départ avec ça non? Le code de cette dernière peut s'avérer intéressant vu que c'est là que tout commence normalement.
Ensuite, si tu utilises Eclipse pour Android tu devrais avoir une vue Logcat quelque part (ou tu peux l'activer dans Windows > Show View > Other > Logcat). Essaie de lancer l'appli depuis eclipse vers ton téléphone, et observe les messages de niveau warn ou error dans logcat: les exceptions peuvent te donner une idée de l'origine du crash.
Merci de ta réponse,
Voilà pour les crash
http://pastebin.com/833sXenq
Je sais pas si ca te parle, moi pas vraiment
Après pour l'activité ouais, y'a une autre fonction (qui marche) & quelque bouton pour activé tout ça, rien de méchant, mais tout fonctionne si je vire la fonction en question, donc je présumes que le soucis doit venir de là?
Je sais que les exceptions parlent peu au début quand on découvre mais à force, ça viendra, tu verras
« Caused by: java.lang.NullPointerException
02-23 00:17:11.186: E/AndroidRuntime(31176): at android.app.Activity.findViewById(Activity.java:18
53)
»
En gros, ton findViewById ne trouve rien.
Vérifie qu'il y a bien un élément portant l'id switchpulse dans la vue utilisée, etc. ![]()
final Switch pulseswitch = (Switch) findViewById(R.id.switchpulse);
Il est bien présent, et le switch porte bien ce nom
Quesque tu entends par 'dans la vue utilisée'?
Désolé, j'comprends pas tout encore j'm'y suis mis y'a 1 semaine ![]()
Tu cherches à exploiter l'état d'un Switch, qui doit exister dans une vue actuellement visible (j'ignore dans quelle mesure elle doit être visible, je ne suis pas un expert Android
).
Du coup j'imagine que tu as un fichier .xml planqué dans res/layout/ qui décrit ton activité, et que ton élément <Switch> se trouve dedans.
Vérifie que ce <Switch> a bien l'attribut android:id="@+id/switchpulse" ![]()
Ouais bon enfaite c'était pulseswitch mais eclipse m'a laissé mettre le mauvais, enfin bon, ca c'est rectifier!^^
Mais maintenant y'a une autre erreur
02-23 00:50:28.340: E/AndroidRuntime(5785): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.led.xperia/led.xperia.XperiaLed}
:
java.lang.ClassNotFoundException: Didn't find class "led.xperia.XperiaLed" on path: DexPathList[[zip file "/data/app/com.led.xperia-2.apk"],nativeLibraryDir
ectories=[/data/app-lib/com.led.xperia-2,
/vendor/lib, /system/lib]]
Voilà l'erreur principal qui ressort du logcat, le fichier androidmanifest est bien configurer sur le nom de l'activité pourtant ![]()
Mmm, étrange. Tu as un Intent, mais as-tu bien une classe qui dérive d'Activity aussi? (une activité quoi, comme je disais dans ma première réponse)
Je doute qu'un Intent seul suffise pour faire ce que tu veux, il te faut une activité de départ déjà.
Tu veux que je t'envois l'activité entière via MP?
PS : en redemarent eclips la premiere erreur est revenu, celle avec 02-23 01:07:51.843: E/AndroidRuntime(7951): at android.app.Activity.findViewById(Activity.java:18
53)
et la deuxième est parti
Cette fois j'ai vérifié, le XML est bon, et le switch porte belle & bien ce nom, donc... j'rebloque ![]()
Fais un clean du projet et rebuild-le (n'utilisant plus Eclipse depuis de plombes, je ne peux pas t'indiquer où ça se trouve).
Au niveau de la lecture des Exceptions, ce n'est pas très compliqué.
Ce qui est pertinent est ce qui contient tes classes. Donc dans ton cas, ce serait ceci :
02-23 00:17:11.186: E/AndroidRuntime(31176): at com.led.xperia.XperiaLed.clignote(XperiaLed.java:2
97)
C'est une NullPointerException (NPE), l'erreur la plus courante en Java et celle-ci est généralement triviale a corriger. Elle indique que tu invoques une méthode sut un objet null, ou que tu passes en paramètre un objet null à une méthode ne le permettant pas.
L'erreur se trouve dans le package com.led.xperia, dans la classe XperiaLed, dans la méthode clignote, et le problème se trouve dans le fichier XperiaLed.java, ligne 297. Ce n'est pas très compliqué à lire.
Ne sachant pas à quelle ligne cela correspond, mais vu que c'est le findViewById qui semble sauter, je dirai : fais-tu bien l'appel à cette méthode après avoir fait un setContentView ?
Tu es typiquement dans un cas d'erreur où tu veux utiliser un item de ta vue avant que celle-ci ne soit mise en place.
Pour ta seconde stacktrace, je dirai que c'est une conséquence de la première. L'instantiation de ta classe ne se fait pas à cause de la NPE, donc déclenche une autre exception plus générale signifiant qu'Android n'a pas réussi à instantier ton Activity.
Salut, merci pour la réponse
Merci pour la réponse, oui le FindViewByID est bien là, et je viens de rajouter le SetContentView, mais le soucis est le même
http://pastebin.com/ZD7sDtHe
Voilà la fonction, la ligne est ici, je suis un peu perdu à vrai dire, tout m'a l'air pourtant bien...
En règle général, setContentView est la première instruction du onCreate.
Peux-tu mettre le code de ton activité au complet s'il te plaît ?
Je te l'ai envoyé
Pourquoi ne pas le mettre sur le forum ? Tu as une quelconque clause de confidentialité à respecter (que tu enfreints en me le fournissant d'ailleurs) ?
Ah euh non non lol, je trouvais ça plus simple^^, http://pastebin.com/R7MFyy6B
Ca dévoie simplement le principe d'un forum, qui est d'avoir une discussion avec potentiellement tout l'internet, et pas avec une seule personne.
De plus, dans les cas des problèmes de développement, rester en public permet d'avoir l'avis d'autres personnes, des compléments ou des rectifications ainsi que d'aider d'autres qui tomberaient sur le sujet avec plus ou moins le même problème.
Ceci mis à part, ton souci vient de "Intent intentclignote = clignote();". En Java (potentiellement dans les autres langages orienté objet, mais je n'y mettra pas ma main à couper), une classe se créer dans cet ordre :
- création de toutes les classes mères
- création de la classe fille (squelette)
- exécution des blocs statiques
- exécution des initialisations des variables d'instance
- constructeur
- construction de la classe finie
Ton problème vient du fait que tu cherches à utiliser un item graphique avant même que ta classe ne soit créée. Tu lies la vue dans le onCreate, et tu tentes de l'utiliser 2-3 étapes avant.
Ainsi, déplace ton appel à "clignote()" dans ton onCreate et supprime-le de ta variable d'instance. Ca ne devrait plus planter après ça (enfin, plus pour cette raison du moins).
Effectivement ça a marcher! plus de plantage
Enfin bon, visiblement faut que je revois le code, dès que je changes la couleur & que le switch clignote est sur ON, ca crash
Enfin bon, merci, ta résolu mon soucis ![]()