IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

AppWidget - getStringExtra fait planter mon application


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut AppWidget - getStringExtra fait planter mon application
    Bonjour à tous,

    Je suis en train de me "former" au développement android et je commence par une petite appwidget (pas d'activité de configuration pour l'instant) pour répondre à un de mes besoins du moment (des boutons qui envoie une requête HTTP sur ma box domotique). J'ai donc suivi pas mal de tuto pour comprendre le fonctionnement (je suis développeur à la base dans plusieurs technos) et la structure d'une appwidget android.
    Je pars de la base car je me heurte à un symptôme que je n'arrive pas à comprendre qui m'a obligé à tout reprendre petit à petit : et c'est pas faute d'avoir chercher des réponses sur le net !!!

    J'ai créé un widget qui contient concrètement un 'textview' et un 'button'. Et je voudrais commencer par faire un truc tout con : un clic sur le bouton affiche un texte défini dans mon 'textview'.
    Je passe par des intent qui demande le rafraîchissement de mon widget et comme à terme, j'aurai plusieurs boutons qui envoient cette même action, je cherche à distinguer qui vient d'appeler et traiter les distinctions de bouton dans le "onreceive" de mon code. Je passe donc, comme je l'ai vu à plusieurs endroits, par les méthodes "putExtra(<code>,<valeur>)" dans le 'onupdate' et les méthodes de récupération "getStringExtra(<code>)" dans le 'onreceive'.

    Malheureusement, si j'arrive bien à afficher dans un "toast" le résultat de mon intent.getStringExtra("moncode"), je ne parviens pas à le manipuler ailleurs. Si je mets dans le résultat dans une variable et que je manipule la variable, j'ai un "nullpointerexception" qui se lève sur la variable. Si je teste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(intent.getStringExtra("moncode").equals("toto")) {
    ...
    }
    , j'ai un nullpointerexception....

    C'est incompréhensible. Si vous savez pourquoi ça me donne ça, je suis preneur.
    Je suis sur le SDK pour android 4.4.2. Et j'obtiens les mêmes plantages sur ce soit sur émulateur ou sur device USB.

    Pour être plus précis, voici le code tout con :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class JeedomControllerWidget extends AppWidgetProvider {
     
        private static String monTexte;
     
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            super.onUpdate(context, appWidgetManager, appWidgetIds);
     
            final int length = appWidgetIds.length;
            for (int i = 0 ; i < length ; i++) {
                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_main);
     
                // On met le bon texte dans le bouton
                views.setTextViewText(R.id.vwStatus, "Mon texte à moi : " + monTexte);
     
                Intent previousIntent = new Intent(context, JeedomControllerWidget.class);
     
                previousIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                previousIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
                previousIntent.putExtra("monchoix", "boutonOn");
     
                Uri data = Uri.withAppendedPath(Uri.parse("WIDGET://widget/id/"), String.valueOf(R.id.boutonOn));
                previousIntent.setData(data);
     
                PendingIntent previousPending = PendingIntent.getBroadcast(context, 0, previousIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                views.setOnClickPendingIntent(R.id.boutonOn, previousPending);
     
                appWidgetManager.updateAppWidget(appWidgetIds[i], views);
            }
     
        }
     
        @Override
        public void onReceive(Context context, Intent intent) {
     
            //RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_main);
            // On met le bon texte dans le bouton
            //views.setTextViewText(R.id.vwStatus, "Mon nouveau à moi");
            String receive = intent.getStringExtra("monchoix");
            Toast.makeText(context,receive,Toast.LENGTH_LONG).show();
            //monTexte = (receive.isEmpty())?"ok":"ko";
            if (intent.getStringExtra("monchoix").equals("boutonOn")) {
                monTexte = "J'ai cliqué";
            }
     
            // On revient au traitement naturel du Receiver, qui va lancer onUpdate s'il y a demande de mise à jour
            super.onReceive(context, intent);
        }
    }
    Merci de votre aide !

  2. #2
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bon ben je me réponds à moi-même.
    Pour une raison que j'ignore, il semble que ça fonctionne maintenant. C'est vraiment à n'y rien comprendre !!!!

    Donc, j'ai pas la solution, mais pour l'instant, ça marche....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/12/2011, 10h45
  2. [CVSNT] Fait planter mon pc.
    Par warenbe dans le forum CVS
    Réponses: 0
    Dernier message: 29/10/2008, 19h17
  3. comment trouver ce qui fait planter mon VS ?
    Par gorgonite dans le forum Visual Studio Team System
    Réponses: 3
    Dernier message: 03/06/2008, 23h40
  4. Réponses: 4
    Dernier message: 28/06/2007, 00h05
  5. Réponses: 2
    Dernier message: 17/03/2007, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo