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 variable globale


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut Problème variable globale
    Bonjour. Dans mon mainactivity, je souhaite récuper is qui est dans the task. Ma méthode ne fonctionne pas. Pouvez-vous m'aider svp?
    MainActivity:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    package com.example.basedonnees;
    
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    //import org.apache.http.NameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.ListActivity;
    import android.net.ParseException;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.Toast;
    
    
    public class MainActivity extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.main);
            String result = null;
            String probleme= null;
         InputStream is = null;
         JSONObject json_data=null;
         //ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
         ArrayList<String> donnees = new ArrayList<String>();
    
         try{
        	 
     
         //commandes httpClient
    
            TheTask task= new TheTask();
            
            task.execute("http://192.168.15.117/ecoles/projet.php");
            
            is=task.is;
            Log.i("is=","" +is);
            
            probleme=task.entityStr;
            Log.i("entityStr=",""+probleme);
            
            //HttpClient httpclient = new DefaultHttpClient();
            /*HttpPost httppost = new HttpPost("http://127.0.0.1/ecoles/projet.php");
            Log.i("connect base","coucou");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            Log.i("connect base","coucou1");
            HttpResponse response = httpclient.execute(httppost);
            Log.i("connect base","coucou2");
            HttpEntity entity = response.getEntity();
            is = entity.getContent();*/
            
            
         }
         catch(Exception e){
        	 	Log.i("taghttppost",""+e.toString());
        	 	
        	 	
                Toast.makeText(getBaseContext(),e.toString() ,Toast.LENGTH_LONG).show();
           }
        
           
         //conversion de la réponse en chaine de caractère
            try
            {
            	Log.i("connect base","coucou");
            	Log.i("is=",""+is);
            	Log.i("ok=","ok");
             BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
             Log.i("connect base","coucou1");
             
             StringBuilder sb  = new StringBuilder();
             
             String line = null;
             
             while ((line = reader.readLine()) != null) 
             {
             sb.append(line + "\n");
             }
             
             is.close();
             
             result = sb.toString();
    
            }
            catch(Exception e)
            {
             Log.e("tagconvertstr",""+e.toString());
            }
            //recuperation des donnees json
            try{
              JSONArray jArray = new JSONArray(result);
                
                 for(int i=0;i<jArray.length();i++)
                 {
                
                       json_data = jArray.getJSONObject(i);
                       donnees.add(json_data.getString("nom"));
                       //r.add(json_data.getString("categorie"));
                       
                   }
                    setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, donnees));
                }
                catch(JSONException e){
                 Log.e("tagjsonexp",""+e.toString());
                } catch (ParseException e) {
                 Log.e("tagjsonpars",""+e.toString());
           }
                
        }
    }
    Et TheTask:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    package com.example.basedonnees;
     
    import java.io.InputStream;
    import java.util.ArrayList;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
     
    import android.os.AsyncTask;
    import android.util.Log;
    import android.widget.TextView;
     
    public class TheTask extends AsyncTask<String,String,String>
        {
    	private TextView textView;
    	public InputStream is;
    	public String entityStr;
     
     
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        // update textview here
        textView.setText("Server message is "+result);
    }
     
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }
     
    public InputStream Avoiris() {
    	Log.i("Avoiris=",""+is);
        return is;
    }
    @Override
    protected String doInBackground(String... params) {
    	ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
         try
            {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost method = new HttpPost(params[0]);
                Log.i("method=",""+method);
                method.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(method);
                HttpEntity entity = response.getEntity();
     
                if(entity != null){
                	Log.i("entity=","" +entity);
                	Log.i("message1=","coucou");
                	entityStr=EntityUtils.toString(entity);
                    Log.i("message2=","coucou");
                    Log.i("entityString=","" +entityStr);
     
                	HttpClient httpclient2 = new DefaultHttpClient();
                	HttpPost method2 = new HttpPost(params[0]);
                    Log.i("method=",""+method2);
                    method2.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response2 = httpclient2.execute(method2);
                    HttpEntity entity2 = response2.getEntity();
     
                    Log.i("entity2=","" +entity2);
                	is = entity2.getContent();
                	Log.i("is=",""+is);
                    return entityStr;
                }
                else{
                	Log.i("entity=","" +entity);
                    entityStr="No string.";
                    return entityStr;
                }
             }
             catch(Exception e){
            	 Log.i("entity=",e.toString());
                 entityStr="Network problem";
                 return entityStr;
             }
     
     
    }
    }

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 50
    Par défaut
    C'est sûr que ça ne marchera pas.
    Car après ton theTask.execute()
    tu fait is = theTask.is
    rien ne garantit que la variable est alimentée en ce moment!

    la méthode execute lance la tâche et retourne. le doInBackground est exécutée dans un autre thread alors que ton thread graphique est déjà au niveau "is = theTask.is".


    Il faut faire en sorte que tu passes le résultat (ton is) dans le onPostExecute().

    Voici une suggestion (mais ça n'empêche que tu as besoin de repenser ton concept)

    Nom : task.png
Affichages : 200
Taille : 7,9 Ko

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut :(
    Désolé mais je ne comprends pas ton graphique

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut
    Sachant que is est un inputstream et pas un string comme dans postexecute()

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut
    Je suis debutant en java

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 50
    Par défaut
    Citation Envoyé par mimir02 Voir le message
    Désolé mais je ne comprends pas ton graphique
    Pour faire simple (mais ça ne veut pas dire que c'est propre)

    Tu divises ton code onCreate() de la façon suivante:


    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
    MainActivity ...{
    
    TheTask task
    
    void onCreate(){
    ....
    task =new Task(this)
    task.execute(....)
    }
    
    
    public void handleResult(InputStream is){
      //le reste du code ici
       probleme=task.entityStr;
       Log.i("entityStr=",""+probleme);
       .....
    }
    ....
    }
    
    public class TheTask extends AsyncTask<String,String,String>{
    
    
      MainActivity activity
    
      public TheTask(MainActivity a){
        activity = a;
      }
    
      void onPostExecute(Result){
       ....
       activity.handleResult(is)
      }
    
    .....
    }

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut
    Il y'a une erreur pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void handleResult(InputStream is){
    me disant que void est un type invalide pour la variable handleResult

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut
    j'ai pas le droit de mettre une methode dans une autre methode?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public void onCreate(Bundle savedInstanceState) {
     public void handleResult(InputStream is){
    }
    }
    Je devrais plutot faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public void handleResult(InputStream is){
    }
    public void onCreate(Bundle savedInstanceState) {
    handleResult(is)
    }
    ?

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

Discussions similaires

  1. Problème variable globale
    Par nanoute dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/08/2009, 13h03
  2. Problème variable globale contenant un stream !
    Par palmitoto dans le forum Lisp
    Réponses: 4
    Dernier message: 25/04/2008, 05h40
  3. Problème variables globales
    Par jcatala dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 20/03/2008, 20h22
  4. problème variable globale
    Par logarithme1984 dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h22
  5. [javascript] Problème variable globale !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/08/2005, 16h41

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