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 :

Erreur "NullPointerException" appel de méthodes d'un service


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Par défaut Erreur "NullPointerException" appel de méthodes d'un service
    Bonjour,

    J'ai un browser de fichiers audio et quand je clique sur les noms de musique, cela appelle un PlayerActivity mais quand j'appelle une méthode de mon service (AudioPlayer) qui va jouer une musique dans la méthodes onCreate de cette Activity, j'obtiens un NullPointerException.

    En revanche, si je l'enlève et que je clique avec mes boutons Play etc, ça fonctionne.

    En fait, il fait le startService à la fin de la méthode onCreate j'ai l'impression (quand la méthode est consumée).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    intent = new Intent(SoundRecorderActivity.this, AudioPlayer.class);
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
     
    startService(intent);
    playerService.startPlaying(fileName);
    Le NullPointerException est sur playerService.startPlaying(fileName);

    Quelqu'un saurait-il m'indiquer comment corriger ce problème ?

    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Par défaut
    Si tu as un NPE sur playerService.startPlaying(fileName), c'est que playerService est null. Où/comment est initialisé ce playerService ? Ton extrait de code ne le montre pas...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Par défaut
    Je peux le montrer mais je pense pas que ca aidera vu quil marche.
    Jai un NPE que quand jappel des methodes de celui ci dans la logique lineaire du code onCreate de lactivity.

    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
    public class AudioPlayer extends Service implements IBackgroundService{
     
    	public void onCreate() { 
            //code to execute when the service is first created
            super.onCreate(); 
            Log.d(this.getClass().getName(), "onCreate()");
            mBinder = new BackgroundServiceBinder(this);    
        } 
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i(this.getClass().getName(), "Received start id " + startId + ": " + intent);
            //startPlaying(intent.getStringExtra("filename"));
            return startId; 
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class BackgroundServiceBinder extends Binder{ 
     
        private IBackgroundService service = null; 
     
        public BackgroundServiceBinder(IBackgroundService service) { 
            super(); 
            this.service = service; 
        } 
     
        public IBackgroundService getService(){ 
            return service; 
        } 
    };
    Merci d'avance

  4. #4
    Membre expérimenté Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Par défaut
    Ce que je voulais dire, c'est qu'on ne voit pas quand/comment est initialisée la variable/attribut playerService. Et que c'est là que doit se situer le problème...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Par défaut
    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
        private ServiceConnection mConnection = new ServiceConnection() {
    		public void onServiceConnected(ComponentName name, IBinder service) {
     
                Log.i(LOG_TAG, "Connected service!"); 
     
    	        playerService = ((BackgroundServiceBinder)service).getService(); 
     
    	        playerService.addListener(listener); 
    		}
     
    		public void onServiceDisconnected(ComponentName name) {
    			playerService = null;
                Log.i(LOG_TAG, "Disconnected service!"); 
    		}
        };

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Par défaut
    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
        private ServiceConnection mConnection = new ServiceConnection() {
    		public void onServiceConnected(ComponentName name, IBinder service) {
     
                Log.i(LOG_TAG, "Connected service!"); 
     
    	        playerService = ((BackgroundServiceBinder)service).getService(); 
     
    	        playerService.addListener(listener); 
    		}
     
    		public void onServiceDisconnected(ComponentName name) {
    			playerService = null;
                   Log.i(LOG_TAG, "Disconnected service!"); 
    		}
        };
    Voila comment je fais.

    Cordialement,

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Peut être que tu invoques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    playerService.startPlaying(fileName);
    avant que le playerService soit instancié ?

  8. #8
    Membre expérimenté Avatar de chpil
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 143
    Par défaut
    Donc, la variable playerService n'est initialisée que lorsque le bind avec le service est réellement fait; ce n'est qu'à partir de ce moment là que tu peux l'utiliser.
    Dans ton cas, tu pourrais faire l'appel à startPlaying dans le onServiceConnected plutot que dans le onCreate, et tu aurais le comportement que tu souhaites

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

Discussions similaires

  1. Erreur lors de l'appel des méthodes d'un WebService
    Par jof8dev dans le forum Services Web
    Réponses: 2
    Dernier message: 03/08/2012, 12h15

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