Précédent   Forum des professionnels en informatique > Java > Général Java > Java & Mobiles > Android
Android Forum d'entraide sur Android, la plateforme mobile de Google pour téléphones portables et Smartphones. Avant de poster -> FAQ Android
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2012, 10h16   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 23
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : décembre 2008
Messages : 23
Points : 10
Points : 10
Par défaut Service en tant que controller (MVC)

Bonjour,

Je souhaite me servir d'un service en tant que controller d'un MVC. Théoriquement ça devrait marcher, mais j'ai un souci.

J'instancie mon service dans l'activity principale. C'est lui qui gèrera ensuite l'affichage des activity successives.

Pour le lancement de la première activity, pas de souci: je bind le service, je fais mes traitements et je récupère un résultat. Je lance ensuite une seconde activity, mais j'ai un souci: je bind le service, mais quand je souhaite accéder à une donnée j'obtiens un "java null pointer exception".

Voilà un bout de mon code:

Dans chaque activity j'ai ça:

Code :
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
 
private MyController mController
private ServiceConnection mControllerConnection = new ServiceConnection() {
	    public void onServiceConnected(ComponentName className, IBinder service) {
	        LocalBinder binder = (LocalBinder) service;
	        mController = binder.getService();
	        mBound = true;
	    }
 
@Override
	protected void onStart() {
		super.onStart();
		Intent intent = new Intent(this, MyController.class);
	        bindService(intent, mControllerConnection, Context.BIND_AUTO_CREATE);
 
		EditText editTextAmount = (EditText) findViewById(R.id.edtTxtAmount1);
		try{
		editTextAmount.setText(mController.donnée_à_récupérer);
		}
		catch (Exception e){
			editTextAmount.setText(e.toString());    // cette exception est levée
		}
	}
 
	@Override
	protected void onDestroy() {
		unbindService(mControllerConnection);
		super.onDestroy();
	}

Et dans le service, je lance les activity comme ceci:

Code :
1
2
3
Intent intent = new Intent(this, NextActivity.class);
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			startActivity(intent);
J'ai pensé à un problème de flag mais je n'ai pas tout compris.
Merci d'avance
Arno5788 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 14h20   #2
Modérateur
 
Homme Nicolas Romantzoff
Ingénieur systèmes et réseaux
Inscription : février 2007
Messages : 1 242
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Romantzoff
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2007
Messages : 1 242
Points : 1 806
Points : 1 806
Envoyer un message via Skype™ à nicroman
Par définition un service est un "thread" à part...
Il n'est donc pas forcément démarré tout de suite, et le bind n'est pas fini immédiatement (ce qui crée probablement le NPE, il faudrait vérifier à quelle endroit du code ce NPE se produit...).
Il faut attendre l'évenement de bind fini pour pouvoir accéder au service.
nicroman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 09h29   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 23
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : décembre 2008
Messages : 23
Points : 10
Points : 10
J'ai trouvé entre-temps, c'est exactement ça, merci ! J'avais omis ce détail des services
Arno5788 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h38.


 
 
 
 
Partenaires

Hébergement Web