Bonjour à tous,
je me prends la tête sur un truc, qui je suis sur est tout bête....

Je suis en train de développer une application de tracking GPS. j'ai une activité qui permet d'avoir une interface graphique et un Service qui effectuer tous les calculs, sauvegardes de fichiers, localisation GPS, etc :

ACTIVITE :
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
 
public class MainActivity extends Activity implements OnClickListener
{
 MyService myService;
 @Override
 public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.application);
 
      //Connexion de l'activité au service MyService
      ServiceConnection myServiceConnection = new 
      ServiceConnection()
           {
               @Override  
               public void onServiceDisconnected(ComponentName name)
                { 
                     myService = null;
                } 
 
               @Override  
               public void onServiceConnected(ComponentName name, IBinder service)
               { 
                     myService = ((MyService.MyActivityBinder)service).getMyService();
               } 
           }; 
 
        //Démarrage du Service
        Intent serviceIntent = new Intent(this, MyService.class); 
        startService(serviceIntent);
 
        //Listener sur les boutons
        findViewById(R.id.bouton).setOnClickListener(this);
 
        Toast.makeText(MainActivity.this, String.valueOf(myService.VARIABLE), Toast.LENGTH_LONG).show();
   }
 
//Action sur les boutons
public void onClick(final View v)
{
 
}
SERVICE :
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
 
public class MyService extends Service implements LocationListener
{
        //Déclaration de la variable à récupérer à partir de l'activité
        public int VARIABLE = 10;
 
public class MyActivityBinder extends Binder
	{ 
	   MyService getMyService()
	   {  
	      return MyService.this; 
	   } 
	}
 
	private IBinder myBinder = new MyActivityBinder();
 
	@Override  
	public IBinder onBind(Intent intent)
	{  
	   return myBinder;
	}
 
   @Override  
   public void onCreate()
   {  
      super.onCreate();
   }
 
   @Override  
 	public int onStartCommand(Intent intent, int flags, int startId) 
 	{  
 	   return START_REDELIVER_INTENT;
 	}
}
MANIFEST :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
//entre les balises application qui contient l'activité
<service android:name=".MyService"/>

Mon but est de pouvoir récupérer la valeur de la variable VARIABLE qui se trouve dans la class MyService, à partir de l'activité et plus particulièrement à partir de la méthode onCreate.

Pour cela, dans l'exemple, j'ai mis un Toast dans onCreate de mon activité, qui me renvoie cette valeur.

Mon problème c'est que l'appli plante et je pense savoir pourquoi, mais je ne sais pas comment faire pour résoudre ce problème.

Hypothèse : Lors du lancement de l'application, l'activité est instanciée avant le service, ce qui fait planter l'appli car il n'y a pas encore d'espace alloué à cette variable (elle n'existe pas encore).
Pourquoi je suppose ça ? et bien parce que lorsque je mets mon toast dans la méthode onClick. Lorsque je lance l'application et que je clic sur le bouton, cela me renvoie bien la valeur de VARIABLE (à savoir 10).

J'ai aussi essayé de récupérer la valeur de myService dans un toast et cela me renvoi null lorsque le toast est dans onCreate et une série de caractères lorsque le toast est dans onClick. Par conséquent, le service n'est effectivement pas connecté (ou instancié) lors de l'exécution de onCreate de mon activité.

COMMENT FAIRE POUR RÉSOUDRE ÇA ???

Merci d'avance.