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 :

Question de syntaxe AsyncTask


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut Question de syntaxe AsyncTask
    Bonjour,

    J'essaye plutôt que de faire x classes internes et x appels d'exécution une boucle qui gèrerait le tout.

    J'ai donc ma boucle for (qui j'espère fonctionnera 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
    for (int i = 0; (i < buttonId.length); i++){
    			buttonMap[i] = (Button) v.findViewById(buttonId[i].getResId());
    			listViewMap[i] = (ListView) v.findViewById(listViewId[i].getResId());
    			listViewMap[i].setVisibility(View.GONE);
    			arrayAdapterMap[i] = new ArrayAdapter<String>(this.getActivity(), arrayAdapterId[i].getResId(), mData[i]);
     
    			buttonMap[i].setOnClickListener(new MyListViewListener(listViewMap[i]));
     
    			listViewMap[i].setAdapter(arrayAdapterMap[i]);
     
    			listViewMap[i].setOnItemClickListener(new MyListViewItemListener(mData[i], getActivity()));
     
    			new AsyncDownload().execute(urlView1, "periode", "allPeriode", mData[i]);
    		}
    La dernière ligne de celle-ci appel les tâches asynchrones pour chaque liste que j'ai créé dans ma boucle.
    Et donc je fais une classe (externe), déjà là apparemment le .execute n'est plus toléré.

    Ce que j'aimerais savoir c'est quelle syntaxe je dois utiliser pour passer mes tableau en paramètre pour que cela ne provoque plus d'erreur dans ma classe:

    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
    public class AsyncDownload extends AsyncTask<String, Void, List<String>> {
     
    	public HttpConnexion mHttpConnexion = new HttpConnexion();
    	public InputStream mInputStream;
     
    	@Override
    	protected List<String> doInBackground(String... params) {
    		// TODO Auto-generated method stub
    		String url = params[0];
    		String key= params[1];
    		String periode = params[2];
    		List<String> mData = (List<String>) params[3];
    		mInputStream = mHttpConnexion.getConnexionHttp(url, key, periode);
    		String res = mHttpConnexion.convertToString(mInputStream);
    		mData = mHttpConnexion.parseJsonFile(res);
    		return mData;	
    	}
     
    	@Override
    	protected void onPostExecute(List<String> result) {
    		super.onPostExecute(result);
    		if (result != null){
    			mData=result;
    			mAdapter.clear();
    			for (String str : result){ //for i:0; i<mData.size(); i++ ==> String str = mData.get(i) // Ligne modifiée
    				mAdapter.add(str);
    			}
    			mAdapter.notifyDataSetChanged();
    		}
    	}
     
     
    }
    Ici ça serait mData et mAdapter.


    Une seconde question pour une classe onItemClickListener, le startActivity n'est pas reconnu con plus et il me demande de créer une méthode (mais je ne vois pas ce que je dois mettre dedans:

    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
    public class MyListViewItemListener implements OnItemClickListener {
    	private List<String> list;
    	private FragmentActivity fragmentActivity;
     
    	public MyListViewItemListener(List<String> list, FragmentActivity activity) {
    		// TODO Auto-generated constructor stub
    		this.list = list;
            this.fragmentActivity = fragmentActivity;
    	}
     
    	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    		// TODO Auto-generated method stub
    		String choix = list.get(position);
    		Bundle mObjetBundle = new Bundle(); //Permet de passer un paramètre à l'autre activité
    		mObjetBundle.putString("choix", choix);
    		Intent t = new Intent(fragmentActivity, Tableau.class); //permet d'appeler la nouvelle activité
    		t.putExtras(mObjetBundle);
    		startActivity(t);
    	}
     
    	private void startActivity(Intent t) {
    		// TODO Auto-generated method stub
     
    	}
    }
    Voilà en espérant que vous serez m'aider ^^

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Billets dans le blog
    3
    Par défaut
    startActivity est une méthode d'un context....

    Il te faut donc stocker un pointeur sur le contexte.

    Si ta classe est fille d'une activité (comme habituellement), elle peut directement référencer l'activité qui l'a créé: MonActivity.this
    Du coup: MonActivity.this.startActivity()

    Si ta classe n'est pas fille d'une activité, il y a de fortes chances pour qu'elle doivent intéragir avec le contexte de l'application (et donc recevoir un context à la construction).

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Billets dans le blog
    3
    Par défaut
    En plus tu passes déjà l'activité en paramètre....

    Donc c'est certainement une classe publique statique....

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Tu parles de la MyListViewListener?

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    C'est bon j'ai compris ce que tu voulais dire.
    Par contre tu as une idée pour le passage en paramètre des mes tableaux dans le asyncDownload?

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Tu peux modifier le (les) constructeur(s) de l'asyncTask et y passer des objets complexes

    L'asyncTask est une classe comme les autres.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Mais le problème dans cet exemple c'est que mes paramètres ne peuvent être que des String, et je ne vois pas quoi ajouter pour permettre de passer mon tableau :s

    Donc j'ai ma classe AsyncTask:

    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
    package rapport.presse.cim;
     
    import java.io.InputStream;
    import java.util.List;
     
    import android.os.AsyncTask;
     
    public class AsyncDownload extends AsyncTask<String, Void, List<String>> {
     
    	public HttpConnexion mHttpConnexion = new HttpConnexion();
    	public InputStream mInputStream;
     
    	@Override
    	protected List<String> doInBackground(String... params) {
    		// TODO Auto-generated method stub
    		String url = params[0];
    		String key= params[1];
    		String periode = params[2];
    		List<String> mData = params[3];
    		mInputStream = mHttpConnexion.getConnexionHttp(url, key, periode);
    		String res = mHttpConnexion.convertToString(mInputStream);
    		mData = mHttpConnexion.parseJsonFile(res);
    		return mData;	
    	}
     
    	@Override
    	protected void onPostExecute(List<String> result) {
    		super.onPostExecute(result);
    		if (result != null){
    			mData=result;
    			mAdapter.clear();
    			for (String str : result){ //for i:0; i<mData.size(); i++ ==> String str = mData.get(i) // Ligne modifiée
    				mAdapter.add(str);
    			}
    			mAdapterAll.notifyDataSetChanged();
    		}
    	}	
    }
    Et dans mon activité au sein d'une boucle for j'ai mon appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new AsyncDownload().execute(urlView1, "periode", "allPeriode", mData[i]);
    D'ailleurs le .execute() pose problème (je suppose que c'est pasque c'est pas dans une classe interne et donc qu'il n'est pas nécessaire?

    Par contre pour passer le tableau vu que mes params sont que des String là ça pue un peu :s

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Le constructeur c'est AsyncDownload pas AsyncTask<...>

    Donc ajoute un constructeur AsyncDownload avec tous les paramètres que tu veux.

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Ha ok vu comme ça.
    C'est un peu perturbant vu que le asyncTask gère les formats des éléments tels que params pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doInBackground(String... params)
    et
    et le format du paramètre de ma void

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Je vois pas comment faire pour que ces paramètre passent dans la partie onPostExecute :s

  11. #11
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Citation Envoyé par vangoeth Voir le message
    Je vois pas comment faire pour que ces paramètre passent dans la partie onPostExecute :s
    un truc du style:

    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
    public AsyncDownload extends AsyncTask<...>()
    {
    private String _test1 = null;
    private Activity _act1 = null;
     
    //Constructeur
    public AsyncDownload(String test1, Activity act1...)
    {
    this._test1 = test1;
    this._act1 = activity1;
    }
     
    ... postExecute()
    {
    //this._test1 accessible
    //this._act1 accessible
    }
     
    ...
    }

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Ouais mais le soucis c'est que j'ai des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mArrayAdapter.add(str);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mArrayAdapter.notifyDataSetChanged();
    Et ça passe pas ça ^^
    Et par après pour exécuter bah dans l'autre classe (mon activité) ça fonctionne pas (à la base j'avais plusieurs classes internet asynchrones)

  13. #13
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    revois ton implémentation dans ce cas.

    C'est que tu fais fausse route et emploie un sabre pour couper ta viande (tu vois l'idée)

    Les codes doivent être courts.

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Bah justement c'est ça que j'essaye de faire, rendre le code plus court en rendant mes classes plus polyvalentes (mais la tâche n'est pas des plus simple).

    ps: d'ailleurs franchement déclarer le tout en tableau de variables, ça fou un bordel monstrueux pour avoir au final un code bcp moins intuitif si un développeur autre que moi doit y passer -_-

  15. #15
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Je ne vois pas trop ce que tu veux faire
    Tu veux tout reloader?

    Peux-tu nous donner un résumé textuel (pas de code) de ce que tu veux faire?

    Parfois on fait des reload aux mauvais endroits, mauvais moments (ça m'est arrivé).

    Par exemple, c'est plus indiqué de le faire lors du click d'un onglet et pas à chaque fois qu'une de ces valeurs changent.

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    En fait c'est que j'ai 6 boutons, 6 listes.
    mais le truc c'est que si je ne clear pas, ça me raffiche le même contenu pour 2 listes ouvertes (un peu gênant ^^)

  17. #17
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    C'est que tu as la même référence.

    Clear tout et recommence les from scratch

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    C'était nécessaire pour éviter que les listes se complètes et donc affiche du contenu supplémentaire (mais elles ont toutes un id et des variables différentes).
    Juste entre activité j'utilise les même noms mais ça c'est pas trop grave.
    Mais de toute façon ça règle pas le problème que je ne sais pas faire le .add() ou le .notifyDataSetChanged() qui sont nécessaires.

  19. #19
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 137
    Par défaut
    Une solution?

    Il me dit ça: Cannot invoke clear() on the array type ArrayAdapter[]
    Mais le problème c'est que je dois agir sur un élément d'un tableau de type ArrayAdapter

  20. #20
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Billets dans le blog
    3
    Par défaut
    Moi je serai toi, je ferai un AsyncTask par entrée du tableau... maintenant... à toi de voir ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Debutant - Question de syntaxe "::" seuls devant u
    Par Caille dans le forum Débuter
    Réponses: 3
    Dernier message: 08/02/2006, 15h59
  2. Question de syntaxe
    Par dafalri dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 13/12/2005, 20h57
  3. [XML] Questions de syntaxe
    Par ghohm dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 03/11/2005, 12h08
  4. question sur syntaxe d'une requete
    Par sparis dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 29/09/2005, 11h58
  5. [C linux makefile] question de syntaxe
    Par Ultros dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 09/04/2004, 07h58

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