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 :

Problème de transmission d'un ParcelableArrayList


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Par défaut Problème de transmission d'un ParcelableArrayList
    Bonjour,

    Tout d'abord je ne sais pas si il existe un endroit où se présenter, je n'hésiterai pas à y indiquer mon profil.

    Pour faire simple, je suis actuellement en train de travailler sur une application dont une partie doit permettre de gérer des périphériques bluetooth.
    Je stocke donc les périphériques bluetooth découverts par mon BluetoothAdapter dans une ArrayList<BluetoothDevice>.

    Lorsque je souhaite sauvegarder cette liste depuis la fonction onSaveInstanceState de mon activité puis la récupérer dans la fonction onRestoreInstanceState,
    cette liste me revient vide.

    Mon code est le suivant, sachant que la classe BluetoothDevice implémente Parcelable et que pour un objet simple mon code fonctionne correctement.

    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
     
            private ArrayList<BluetoothDevice> listBluetooth = new ArrayList<BluetoothDevice>();
     	private BluetoothDevice mCurrentDevice;
     
            @Override
     	protected void onSaveInstanceState (Bundle bundle)
     	{
    		 super.onSaveInstanceState(bundle);
    		 bundle.putParcelable("currentDevice", mCurrentDevice);
                     //ici listBluetooth.size() > 0
    		 bundle.putParcelableArrayList("bluetoothList", listBluetooth);
    	 }
     
    	 @Override
    	 public void onRestoreInstanceState(Bundle savedInstanceState) {
    		super.onRestoreInstanceState(savedInstanceState);
                    //ici je récupère la bonne valeur de mCurrentDevice
    		mCurrentDevice = savedInstanceState.getParcelable("currentDevice");
    		if (mCurrentDevice != null)
    		{
    			tvCurrentDevice.setBluetoothName(mCurrentDevice.getName());
    			tvCurrentDevice.setBluetoothMacAddress(mCurrentDevice.getAddress());
    		}
     
                    //Ici ma liste est vide
    		listBluetooth = savedInstanceState.getParcelableArrayList("bluetoothList");
                    //Probleme listBluetooth.size() == 0
    		for (int i = 0 ; i< listBluetooth.size() ; i++)
    		{
    			BluetoothNetwork btNetwork = new BluetoothNetwork();
    			btNetwork.setBluetoothNetwork(listBluetooth.get(i));
    			bluetoothArrayAdapter.add(btNetwork);
    		}
    	}
    J’espère que l'un d'entre vous pourra m'éclairer sur ce petit soucis ou me donner une piste de recherche à approfondir.
    Merci d'avance pour votre aide.

    Cyrille

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Par défaut
    J'ai résolu le mystère,

    Ma variable ArrayList<BluetoothDevice> listBluetooth est une variable membre, et je pense qu'il y a un probleme de réallocation lors du passage
    de OnSaveInstanceState à OnRestaureInstanceState.

    J'ai nettoyé mon code, et ma liste de BluetoothDevice est contenue dans un ArrayAdapter que j'utilise pour l'affichage.

    je me passe donc de ArrayList<BluetoothDevice> listBluetooth, par contre je créé une variable locale de type
    ArrayList<BluetoothDevice> à passer à mon bundle et une autre dans la fonction de restauration dans laquelle je récupère mes données.



    Le code que j'ai maintenant et qui fonctionne est le suivant:

    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
     
            private BluetoothArrayAdapter bluetoothArrayAdapter;
    	private BluetoothDevice mCurrentDevice;
     
            @override
    	protected void onSaveInstanceState (Bundle bundle)
    	{
    		super.onSaveInstanceState(bundle);
    		ArrayList<BluetoothDevice> bluetoothList = new ArrayList<BluetoothDevice>();
    		bundle.putParcelable("utt.developpement.bluetooth.currentDevice", mCurrentDevice);
    		for (int i = 0 ; i < bluetoothArrayAdapter.getCount() ; i++ )
    			bluetoothList.add(bluetoothArrayAdapter.getItem(i));
    		bundle.putParcelableArrayList("bluetoothList", bluetoothList);
    	}
     
    	@override
    	public void onRestoreInstanceState(Bundle savedInstanceState) {
    		super.onRestoreInstanceState(savedInstanceState);
    		ArrayList<BluetoothDevice> bluetoothList = new ArrayList<BluetoothDevice>();
    		mCurrentDevice = savedInstanceState.getParcelable("utt.developpement.bluetooth.currentDevice");
    		if (mCurrentDevice != null)
    		{
    			tvCurrentDevice.setBluetoothName(mCurrentDevice.getName());
    			tvCurrentDevice.setBluetoothMacAddress(mCurrentDevice.getAddress());
    		}
     
    		bluetoothList = savedInstanceState.getParcelableArrayList("bluetoothList");
    		for (int i = 0 ; i < bluetoothList.size() ; i++ )
    			bluetoothArrayAdapter.add(bluetoothList.get(i));
    	}

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/06/2007, 01h33
  2. Problème de Transmission de variable par url
    Par toma03 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2007, 21h47
  3. Réponses: 4
    Dernier message: 18/04/2007, 09h16
  4. Problème dans transmission de variables dans anim
    Par baleiney dans le forum Flash
    Réponses: 1
    Dernier message: 13/08/2006, 10h26
  5. Réponses: 31
    Dernier message: 30/08/2005, 13h10

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