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 Studio Java Discussion :

obtenir le json android studio problème variable


Sujet :

Android Studio Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut obtenir le json android studio problème variable
    Bonsoir
    Voila je fais appelle a vous car je n'arrive pas a trouver la solution enfaîte je code en ce moment un projet qui a pour but de rapatrier des mesures depuis un serveur.
    Mon problème est que j'aimerais que mon code sois vraiment séparer entre chaque classe et que j'arrive a faire passer les variables entre les classes pour que celle ci devienne communne aux classes.
    De plus ceci me permettra de pas tout coder dans le même fichier java !

    Ceci dit ,je n'y arrive pas (j'arrive bien a obtenir mon flux json mais pas dans la classe que je veux ! ) donc en faite ma véritable question est comment faire pour faire en sorte que une variable prenne la valeur de la fonction de la classe et que celle ci sois "partagé" pour les autres classes?

    je vous montre mon code (ici j'essais de faire passer la variable JsonParsing2 dans le oncreate et non dans la méthode onPostExecute de la classe BackgroundTask)(je fais la connection a mon serveur je lis les lignes et j'obtiens son flux json qui doit être appelé dans le oncreate).

    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
    119
    120
    121
    122
    123
    public class MainActivity extends AppCompatActivity {
        String JSON_STRING;
        String json_string;
        String json_Parsing;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            new BackgroundTask().execute();
            TextView textView = (TextView) findViewById(R.id.textView2);
     
     
            textView.setText(json_Parsing2);
     
     
        }
       public void getJSON(View view) {
     
            new BackgroundTask().execute();
       }
     
        public class BackgroundTask extends AsyncTask<Void, Void, String> {
            String json_url;
            String json_Parsing2=null;
            @Override
            protected void onPreExecute() {
                json_url = "http://192.168.0.16/projet/php/fichier.php";
            }
            @Override
            protected String doInBackground(Void... params) {
     
                try {
                    URL url = new URL(json_url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    InputStream inputStream = httpURLConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((JSON_STRING = bufferedReader.readLine()) != null) {
                        stringBuilder.append(JSON_STRING + "\n");
                    }
     
                    bufferedReader.close();
                    inputStream.close();
     
                    httpURLConnection.disconnect();
                    json_Parsing2=stringBuilder.toString();
     
                    return stringBuilder.toString();
     
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return json_Parsing2;
     
     
            }
     
            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
     
            }
     
            @Override
            protected void onPostExecute(String result) {
                //TextView textView = (TextView) findViewById(R.id.textView2);
                //textView.setText(result);
                json_Parsing=result;
     
            }
     
        }
     
     
     
     
       /* public void parseJSON(View view) {
            if(json_string==null)
            {
                Toast.makeText(getApplicationContext(),"First get json",Toast.LENGTH_LONG).show();
     
     
            }
     
            else {
     
                Intent intent=new Intent(this,MainActivity.class);
                intent.putExtra("json_data",json_string);
                startActivity(intent);
            }
            }*/
        /*public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
     
     
     
                case R.id.warning:
                    Intent intent = new Intent(MainActivity.this, popUp.class);
                    startActivity(intent);
                    return true;
                case R.id.localiser:
     
     
                    return true;
     
                case R.id.station:
                    return true;
            }
     
            return super.onOptionsItemSelected(item);
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            //ajoute les entrées de menu_test à l'ActionBar
            getMenuInflater().inflate(R.menu.menu, menu);
            return true;
        }*/
     
        }

  2. #2
    Membre actif Avatar de jmonga
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 175
    Points : 269
    Points
    269
    Par défaut
    Tu peux utiliser des intent
    Jonathan Monga

  3. #3
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut,
    ma véritable question est
    comment faire pour faire en sorte que une
    variable prenne la valeur de la fonction de la
    classe et que celle ci sois "partagé" pour les
    autres classes?
    Tu peux être un peut plus explicite s'il te plaît? Tu veux avoir une variable accessible partout (à tous les endroits de ton application) ?

    Remarque : quand tu utilises AsyncTask, c'est la méthode onPostExecute qui se charge de rapatrier le résultat après traitement. Donc c'est dans cette méthode que tu vas remplir ton textview. Et c'est juste après que tu pourras utiliser le bundle pour passer la valeur d'une activity à une autre et avoir la possibilité de retrouver cette valeur partout (en quelque sorte).


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #4
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut re
    Yo,


    @jmonga merci pour ta réponse (sa fais deux fois que tu m'aide je n'ai pas oublier!) .Donc pour les intents je y est penser mais mon appli crash quand je fais sa
    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
    public class MainActivity extends AppCompatActivity {
        String JSON_STRING;
        String json_string;
        String json_Parsing;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            new BackgroundTask().execute();
            json_Parsing=getIntent().getExtras().getString("message");
            TextView textView = (TextView) findViewById(R.id.textView2);
    
    
            textView.setText(json_Parsing);
        }
    
    
       public void getJSON(View view) {
    
            new BackgroundTask().execute();
       }
        
    
        public class BackgroundTask extends AsyncTask<Void, Void, String> {
            String json_url;
            String json_Parsing2=null;
            @Override
            protected void onPreExecute() {
                json_url = "http://192.168.0.16/projet/php/fichier.php";
            }
            @Override
            protected String doInBackground(Void... params) {
    
                try {
                    URL url = new URL(json_url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    InputStream inputStream = httpURLConnection.getInputStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((JSON_STRING = bufferedReader.readLine()) != null) {
                        stringBuilder.append(JSON_STRING + "\n");
                    }
    
                    bufferedReader.close();
                    inputStream.close();
    
                    httpURLConnection.disconnect();
                    json_Parsing2=stringBuilder.toString();
    
                    return stringBuilder.toString();
    
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return json_Parsing2;
    
    
            }
    
            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
    
            }
    
            @Override
            protected void onPostExecute(String result) {
                //TextView textView = (TextView) findViewById(R.id.textView2);
                //textView.setText(result);
                json_Parsing2=result;
                Intent i = new Intent();
                i.putExtra(json_Parsing2, "message");
    
                 }
    Peut être que je maîtrise mal les intents ? ou alors ce n'est pas comme que on les codes ?


    @MasterMbg
    Merci pour ta réponse aussi ! donc en quelque sorte je voudrais avoir la variable jsonparsing 2 qui est dans la class BackgroundTask disponible dans la ma méthode oncreate,
    et pour sa il faut qu'elle sois disponible juste pour la méthode oncreate ou partout ! (normalement cette variable contient mon flux json).

    La BackgroundTask et onCreate sont codé dans le même fichier java et se n'est pas se que je veux tout a fais je voudrais séparer les vues de la partie code donc enfaîte je voudrais mettre le oncreate dans un fichier java et le Background dans un autres !

    C'est pour sa que j'ai besoins de savoir comment faire pour que la variable local jsonParsing2 de BackgroundTask sois disponible pour le oncreate comme sa je les sépare en deux fichier java distinct et je n'est pas besoins d'utiliser justement la méthode onPostExecute pour écrire mon flux json dans un textView.

    De plus si je fais sa sa me servira pour le parsing par la suite

  5. #5
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut
    Citation Envoyé par akiantor Voir le message
    La BackgroundTask et onCreate sont codé dans le même fichier java et se n'est pas se que je veux tout a fais je voudrais séparer les vues de la partie code donc enfaîte je voudrais mettre le oncreate dans un fichier java et le Background dans un autres !
    Dans ce cas, je te propose en trois étapes ceci :

    Etape 1 : tu crées une interface qui va intercepter le résultat une fois que ta classe async l'aurait rendu disponible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface ReturnValue {
        abstract void renvoyerValeurString(String valeurARenvoyer);
    }
    Etape 2 : Ton activity dans laquelle le resultat est voulu doit implémenter cette interface afin d'être à mesure de récupérer directement le résultat une fois disponible.
    Note : Dans mon exemple, je lance la récupération du json dans le clic d'un bouton
    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
    public class MainActivity extends AppCompatActivity implements ReturnValue {
        //Déclarer la variable qui va contenir la chaîne json et qui sera ensuite passée d'une activity à une autre
        String chaineJson;
        //Bouton qui récupère le json
        Button btn_json;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //Créer son interface graphique et gonfler les composants graphiques....
            btn_json = (Button)findViewById(R.id.btn_json);
            //Clic sur le bouton
            btn_json.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //Ici je lance ma classe TaskAsync en lui passant mon activity comme instance afin que le résultat soit directement intercepté depuis ici
                    new TaskAsync().execute(MainActivity.this);
                }
            });
        }
     
       //Redéfinir la méthode renvoyerValeurString
       @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            chaineJson = valeurARenvoyer;
            Toast.makeText(MainActivity.this, chaineJson, Toast.LENGTH_SHORT).show();
        }
    }
    Etape 3 : Pour finir, dans ta classe async, tu crées une instance de l'interface et tu lui affectes l'instance de ton activity (qui est directement
    de type interface car elle l'implémente). et dans la méthode onPostExecute(), tu récupères le résultat renvoyé par la méthode doInBac...
    tu appelles la méthode d'instance servant à passer le résultat sur l'instance de l'interface. Et c'est tout! tu as le résultat dans ton activity!
    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 class TaskAsync extends AsyncTask {
        ReturnValue returnValueImpl;
        @Override
        protected Object doInBackground(Object[] objects) {
     
            String json
            //Récupération de l'activity passée en paramètre lors de l'appel de la méthode execute()
            returnValueImpl = (ReturnValue)objects[0];
           /*Ton code qui se connecte et chope du json...
           /*...
           */
            return json;
        }
     
        @Override
        protected void onPostExecute(Object json) {
            //Ici on récupère le json renvoyé après traitement et on l'envoie directement à notre instance (MainActivity) 
            returnValueImpl.renvoyerValeurString(json.toString());
        }
    }
    Je pense que c'est clair. Sinon, tu es le bienvenu pour d'éventuelles questions.


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  6. #6
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut re
    Yo,
    Merci de ta proposition de programme c'est clair mais sa marche pas quand j'essaie de le coder je m'explique
    J'ai créer maintenant deux fichier java qui un contient la vue de mon interface ou dois etre codé mon textView (MainActivity) et l'autre (BackgroundTask) contient la connexion a mon serveur qui dois obtenir le json et permettre de refiler le json a mon MainActivity.

    Avec ta méthode c'est la première étape que je comprend pas trop bien et la troisièmes car dans la première on créer une interface qui récupère le flux json mais cette interface se code ou? dans le MainActivity qui contient la vu ou dans la BackgroundTask enfin moi je l'ai mis dans le BackgroundTask et le MainActivity

    Pour la troisième étape se que je comprend pas c'est que doInBackGround est en string est non en object et je n'arrive pas a la faire passer en object même en changeant le type de paramètres.
    Je te montre mon code
    Classe 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
     
    public class MainActivity extends AppCompatActivity implements BackgroundTask.ReturnValue {
     
        String json_string;
     
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            new BackgroundTask().execute((Runnable) MainActivity.this);
            TextView textView = (TextView) findViewById(R.id.textView2);
             textView.setText(json_string);
        }
     
     
        public interface ReturnValue {
            abstract void renvoyerValeurString(String valeurARenvoyer);
        }
     
        @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show();
        }
    Class BackgroundTask
    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
    public class BackgroundTask extends AsyncTask<Void, Void, String> {
        String json_url;
        MainActivity.ReturnValue returnValueImpl;
        String jsonParser2;// variable json a retourner a la vu
     
        @Override
        protected void onPreExecute() {
            json_url = "http://10.10.103.36/projet/php/fichier.php"; //Ip serveur
        }
     
        @Override
        protected String doInBackground(Void... params) //obtiens le flux json
        {
     
     
            try {
                URL url = new URL(json_url); // connexion
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
                InputStream inputStream = httpURLConnection.getInputStream(); //lecture
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
                StringBuilder stringBuilder = new StringBuilder();//lecture
                while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
                    stringBuilder.append(jsonParser2 + "\n");//lecture
                }
     
                bufferedReader.close(); //stop
                inputStream.close(); //stop
     
                httpURLConnection.disconnect();//déconecter
                return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return jsonParser2;
        }
     
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
     
        @Override
        protected void onPostExecute(String result)//Donne le résultat
        {
            // TextView textView = (TextView) findViewById(R.id.textView2);
            //  textView.setText(result);
            returnValueImpl.renvoyerValeurString(jsonParser2.toString());
     
     
        }
     
        public interface ReturnValue {
            abstract void renvoyerValeurString(String valeurARenvoyer);
        }
    }

    ps : je suis assez débutant sur android studio et sur java

  7. #7
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Salut,

    Séparer ta classe BackgroundTask du reste en le mettant dans un fichier à part est une donnée dans le cadre où elle n'est pas appelée par une seule classe.

    Il y a plusieurs choses à améliorer dans ta classe mais c'est en bonne voie.

    1 . Ajoute un constructeur dans ta classe
    BackgroundTask
    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
    publicclass BackgroundTask extends AsyncTask<Void, Void, String> {
         private String json_url;
        private ReturnValue returnValueImpl;
         private String jsonParser2;// variable json a retourner a la vu
     
        public BackgroundTask (String json_url) {
    
            this.json_url = json_url;
    
          }
    
    public setReturnListener(ReturnValue listener) {
    
    returnValueImpl = listener;
    
    }
        @Override
        protected String doInBackground(Void... params) //obtiens le flux json
        {
     
     
            try {
                URL url = new URL(json_url); // connexion
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
                InputStream inputStream = httpURLConnection.getInputStream(); //lecture
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
                StringBuilder stringBuilder = new StringBuilder();//lecture
                while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
                    stringBuilder.append(jsonParser2 + "\n");//lecture
                }
     
                bufferedReader.close(); //stop
                inputStream.close(); //stop
     
                httpURLConnection.disconnect();//déconecter
                return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return jsonParser2;
        }
     
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
     
        @Override
        protected void onPostExecute(String result)//Donne le résultat
        {
            // TextView textView = (TextView) findViewById(R.id.textView2);
            //  textView.setText(result);
            returnValueImpl.renvoyerValeurString(jsonParser2.toString());
     
     
        }
     
        public interface ReturnValue {
            abstract void renvoyerValeurString(String valeurARenvoyer);
        } 
    }


    2. Créer une variable de ta classe
    BackgroundTask

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private BackgroundTask mBackgroundTask;

    3.
    Instancies la quand tu en as besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mBackgroundTask = new BackgroundTask(url_ici );
    mBackgroundTask.setReturnListener(this);
    mBackgroundTask.execute((Void)null);
    4. Modifie ta méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override    public void renvoyerValeurString(String valeurARenvoyer) {
    
    mBackgroundTask = null;
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show(); }
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  8. #8
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut re
    Salut,
    Merci de ta réponse mais le programme plante quand je fais ce code je te montre
    BackgroundTask.java

    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
     
    public class BackgroundTask extends AsyncTask<Void, Void, String> {
    private String json_url;
    private ReturnValue returnValueImpl;
    private String jsonParser2;// variable json a retourner a la vu
     
    public BackgroundTask (String json_url) {
     
            this.json_url = json_url;
     
            }
     
    @Override
    protected String doInBackground(Void... params) //obtiens le flux json
            {
     
     
            try {
            URL url = new URL(json_url); // connexion
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
            InputStream inputStream = httpURLConnection.getInputStream(); //lecture
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
            StringBuilder stringBuilder = new StringBuilder();//lecture
            while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
            stringBuilder.append(jsonParser2 + "\n");//lecture
            }
     
            bufferedReader.close(); //stop
            inputStream.close(); //stop
     
            httpURLConnection.disconnect();//déconecter
            return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            }
            return jsonParser2;
            }
     
    @Override
    protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            }
     
    @Override
    protected void onPostExecute(String result)//Donne le résultat
            {
     
            returnValueImpl.renvoyerValeurString(jsonParser2.toString());
     
     
            }
     
            public void setReturnListener(ReturnValue returnListener) {
                    this.returnValueImpl = returnListener;
            }
     
            public interface ReturnValue {
        abstract void renvoyerValeurString(String valeurARenvoyer);
            }
     
    }
    MainActivity.java
    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
    public class MainActivity extends AppCompatActivity implements BackgroundTask.ReturnValue{
        private BackgroundTask mBackgroundTask;
        String json_string;
        String json_url="http://192.168.0.16/projet/php/fichier.php";
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBackgroundTask = new BackgroundTask(json_url);
            mBackgroundTask.setReturnListener(this);
            mBackgroundTask.execute((Void)null);
     
            TextView t =(TextView)findViewById(R.id.textView2);
            t.setText(json_string);
     
        }
        public interface ReturnValue {
            abstract void renvoyerValeurString(String valeurARenvoyer);
        }
     
        @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            mBackgroundTask = null;
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show(); }
    LOG
    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
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: com.suprem.myapplication, PID: 5635
                      java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                          at com.suprem.myapplication.BackgroundTask.onPostExecute(BackgroundTask.java:68)
                          at com.suprem.myapplication.BackgroundTask.onPostExecute(BackgroundTask.java:19)
                          at android.os.AsyncTask.finish(AsyncTask.java:636)
                          at android.os.AsyncTask.access$500(AsyncTask.java:177)
                          at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
                          at android.os.Handler.dispatchMessage(Handler.java:102)
                          at android.os.Looper.loop(Looper.java:135)
                          at android.app.ActivityThread.main(ActivityThread.java:5254)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at java.lang.reflect.Method.invoke(Method.java:372)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    il me dit qu'il ne retourne rien ou que l'object n'est pas instancier c'est sa?

  9. #9
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut re
    Salut,
    Merci de ta réponse mais le programme plante quand je fais ce code je te montre
    BackgroundTask.java

    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
     
    public class BackgroundTask extends AsyncTask<Void, Void, String> {
    private String json_url;
    private ReturnValue returnValueImpl;
    private String jsonParser2;// variable json a retourner a la vu
     
    public BackgroundTask (String json_url) {
     
            this.json_url = json_url;
     
            }
     
    @Override
    protected String doInBackground(Void... params) //obtiens le flux json
            {
     
     
            try {
            URL url = new URL(json_url); // connexion
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
            InputStream inputStream = httpURLConnection.getInputStream(); //lecture
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
            StringBuilder stringBuilder = new StringBuilder();//lecture
            while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
            stringBuilder.append(jsonParser2 + "\n");//lecture
            }
     
            bufferedReader.close(); //stop
            inputStream.close(); //stop
     
            httpURLConnection.disconnect();//déconecter
            return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            }
            return jsonParser2;
            }
     
    @Override
    protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            }
     
    @Override
    protected void onPostExecute(String result)//Donne le résultat
            {
     
            returnValueImpl.renvoyerValeurString(jsonParser2.toString());
     
     
            }
     
            public void setReturnListener(ReturnValue returnListener) {
                    this.returnValueImpl = returnListener;
            }
     
            public interface ReturnValue {
        abstract void renvoyerValeurString(String valeurARenvoyer);
            }
     
    }
    MainActivity.java
    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
    public class MainActivity extends AppCompatActivity implements BackgroundTask.ReturnValue{
        private BackgroundTask mBackgroundTask;
        String json_string;
        String json_url="http://192.168.0.16/projet/php/fichier.php";
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBackgroundTask = new BackgroundTask(json_url);
            mBackgroundTask.setReturnListener(this);
            mBackgroundTask.execute((Void)null);
     
            TextView t =(TextView)findViewById(R.id.textView2);
            t.setText(json_string);
     
        }
        public interface ReturnValue {
            abstract void renvoyerValeurString(String valeurARenvoyer);
        }
     
        @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            mBackgroundTask = null;
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show(); }
    LOG
    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
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: com.suprem.myapplication, PID: 5635
                      java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                          at com.suprem.myapplication.BackgroundTask.onPostExecute(BackgroundTask.java:68)
                          at com.suprem.myapplication.BackgroundTask.onPostExecute(BackgroundTask.java:19)
                          at android.os.AsyncTask.finish(AsyncTask.java:636)
                          at android.os.AsyncTask.access$500(AsyncTask.java:177)
                          at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
                          at android.os.Handler.dispatchMessage(Handler.java:102)
                          at android.os.Looper.loop(Looper.java:135)
                          at android.app.ActivityThread.main(ActivityThread.java:5254)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at java.lang.reflect.Method.invoke(Method.java:372)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    il me dit qu'il ne retourne rien ou que l'object n'est pas instancier c'est sa?

    si sa peut aider j'aimerais retourner se flux json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"id":"1","timestamp":"2017-01-31 10:59:11","id_SIGFOX":"ABER","MPX":"1","RDS":"2","RF":"79","PILOT":"8","a_l":"-5","a_r":"-39","Frequence":"1034"}

  10. #10
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Overrideprotected void onPostExecute(String result)//Donne le résultat
            {
     
            returnValueImpl.renvoyerValeurString(result);  
      }
    Lorsque tu sors de ton doInBackground avec
    c'est en ce moment que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onPostExecute(String result)
    est appelé et qui prend comme paramètres le résultat de ton exécution renvoyé depuis doInBackground
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  11. #11
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Re
    Salut ,
    Effectivement maintenant mon json est afficher grâce a toast !!!!

    Donc maintenant grâce a cette méthode je peux transporter ma variable dans le main mais j'ai un dernier problème

    C'est que j'aimerais que ma variable json_string qui est une variable global prennent la valeur de la valeur de valeurARenvoyer car quand je met json_string=valeurARenvoyer et que après j'essaie de l'appeler depuis le bundle il ne prend aucune valeur et je ne peux que l'appeler depuis la méthode renvoyerValeurString. je montre le main.

    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
    public class MainActivity extends AppCompatActivity implements BackgroundTask.ReturnValue{
        private BackgroundTask mBackgroundTask;
        String json_string;
        String json_url="http://192.168.0.14/projet/php/fichier.php";
        String valeurJson;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBackgroundTask = new BackgroundTask(json_url);
            mBackgroundTask.setReturnListener(this);
            mBackgroundTask.execute((Void)null);
     
     
            TextView t =(TextView)findViewById(R.id.textView2);
            t.setText(json_string);
        }
     
     
        @Override
        public String renvoyerValeurString(String valeurARenvoyer) {
            mBackgroundTask = null;
     
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
     
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show();
        return json_string;
        }
    Sinon merci de m'avoir bien aider dans mon probleme

  12. #12
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Essaie ça :
    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
    public class MainActivity extends AppCompatActivity implements BackgroundTask.ReturnValue{    private BackgroundTask mBackgroundTask;
        private TextView t;
        private String json_string;
        private String json_url="http://192.168.0.14/projet/php/fichier.php";
        private String valeurJson;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
           t =(TextView)findViewById(R.id.textView2);
     
            mBackgroundTask = new BackgroundTask(json_url);
            mBackgroundTask.setReturnListener(this);
            mBackgroundTask.execute((Void)null);
     
     
     
        }
     
     
        @Override
        public String renvoyerValeurString(String valeurARenvoyer) {
            mBackgroundTask = null;
     
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
     
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show();
     
     
            t.setText(json_string); 
     
     
        }
    Le mécanique de ta classe BackgroundTask est qu'il va traiter une tâche dans une thread à part (pour ne pas ralentir l'exécution de ton application). Puis lorsqu'elle a terminé elle renvoie le résultat.
    Or dans la méthode onCreate qui est appelé lors de la création de ton activité il y a de forte chance qu'en ce moment l'exécution de la classe BackgroundTask n'a pas terminé. D'où le fait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.setText(json_string);
    dans ta méthode public String renvoyerValeurString(String valeurARenvoyer) qui elle est appelé à la fin de l'execution de BackgroundTask.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  13. #13
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par akiantor Voir le message
    J'ai créer maintenant deux fichier java qui un contient la vue de mon interface ou dois etre codé mon textView (MainActivity) et l'autre (BackgroundTask) contient la connexion a mon serveur qui dois obtenir le json et permettre de refiler le json a mon MainActivity.
    C'est déjà un bon début

    Avec ta méthode c'est la première étape que je comprend pas trop bien et la troisièmes car dans la première on créer une interface qui récupère le flux json mais cette interface se code ou? dans le MainActivity qui contient la vu ou dans la BackgroundTask enfin moi je l'ai mis dans le BackgroundTask et le MainActivity
    Chaque classe est un fichier à part dans ton projet. Tu auras donc MainActivity.java, ReturnValue.java et TaskAsync.java. Trois fichiers différents

    Pour la troisième étape se que je comprend pas c'est que doInBackGround est en string est non en object et je n'arrive pas a la faire passer en object même en changeant le type de paramètres.
    Je pense que le problème vient de la signature de ta classe BackgroundTask. Tu peux remplacer par ceci :
    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
    public class BackgroundTask extends AsyncTask {
        String json_url;
        ReturnValue returnValueImpl;
        String jsonParser2;// variable json a retourner a la vu
     
        @Override
        protected void onPreExecute() {
            json_url = "http://10.10.103.36/projet/php/fichier.php"; //Ip serveur
        }
     
        @Override
        protected Object doInBackground(Object[] objects) //obtiens le flux json
        {
            //Ici on récupère l'instance de la classe MainActivity qui implémente l'interface ReturnValue
            returnValue = (ReturnValue)objects[0];
     
            //Envoi de la requête
            try {
                URL url = new URL(json_url); // connexion
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
                InputStream inputStream = httpURLConnection.getInputStream(); //lecture
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
                StringBuilder stringBuilder = new StringBuilder();//lecture
                while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
                    stringBuilder.append(jsonParser2 + "\n");//lecture
                }
     
                bufferedReader.close(); //stop
                inputStream.close(); //stop
     
                httpURLConnection.disconnect();//déconecter
                return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //Retourner la valeur à la méthode onPostExecute
            return jsonParser2;
        }
     
        @Override
        protected void onPostExecute(Object result)//Donne le résultat
        {
            returnValueImpl.renvoyerValeurString(jsonParser2.toString());
        }
    Enfin ton 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
     
    public class MainActivity extends AppCompatActivity implements ReturnValue {
     
        String json_string;
        TextView textView;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView textView = (TextView) findViewById(R.id.textView2);
     
            new BackgroundTask().execute(MainActivity.this);
            //textView.setText(json_string); Mettre ça dans la méthode renvoyerValeurString
        }
     
        @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            //C'es ici que tu remplis ton textView
            textView.setText(json_string);
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show();
        }


    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  14. #14
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Seelass Voir le message
    Le mécanique de ta classe BackgroundTask est qu'il va traiter une tâche dans une thread à part (pour ne pas ralentir l'exécution de ton application).
    J'aurais préféré "Pour ne pas figé ou bloquer le MainThread (le thread gérant l'interface graphique)" à la place de "pour ne pas ralentir l'exécution de ton application". De toute façon quand ça fige le maintThread ça ralenti l'exécution donc c'est pas grave
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  15. #15
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Re
    Re ,
    Merci de vos réponses sa m'as bien aider dans mon projet maintenant mon programme marche grâce a vous deux !
    Mon programme finale ressemble a ceci maintenant.

    MainActivity.java
    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
    public class MainActivity extends AppCompatActivity implements BackgroundTask.ReturnValue{
        private BackgroundTask mBackgroundTask;
        private TextView t ;
        String json_string;
        String json_url="http://192.168.0.14/projet/php/fichier.php";
        String valeurJson;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBackgroundTask = new BackgroundTask(json_url);
            mBackgroundTask.setReturnListener(this);
            mBackgroundTask.execute((Void)null);
     
     
             t =(TextView)findViewById(R.id.textView2);
     
        }
     
     
        @Override
        public String renvoyerValeurString(String valeurARenvoyer) {
            mBackgroundTask = null;
     
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            t.setText(json_string);
            Toast.makeText(MainActivity.this, json_string, Toast.LENGTH_SHORT).show();
        return json_string;
        }
     
     
        public void parseJSON(View view) {
     
     
                Intent intent=new Intent(this,AfficheurListView.class);
                intent.putExtra("json_data",json_string);
                startActivity(intent);
            }
     
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
     
     
     
                case R.id.warning:
                    Intent intent = new Intent(MainActivity.this, popUp.class);
                    startActivity(intent);
                    return true;
                case R.id.localiser:
     
     
                    return true;
     
                case R.id.station:
                    return true;
            }
     
            return super.onOptionsItemSelected(item);
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            //ajoute les entrées de menu_test à l'ActionBar
            getMenuInflater().inflate(R.menu.menu, menu);
            return true;
        }
     
        }
    BackgroundTask.java
    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
    public BackgroundTask (String json_url) {
     
            this.json_url = json_url;
     
            }
     
    @Override
    protected String doInBackground(Void... params) //obtiens le flux json
            {
     
     
            try {
            URL url = new URL(json_url); // connexion
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
            InputStream inputStream = httpURLConnection.getInputStream(); //lecture
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
            StringBuilder stringBuilder = new StringBuilder();//lecture
            while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
            stringBuilder.append(jsonParser2 + "\n");//lecture
            }
     
            bufferedReader.close(); //stop
            inputStream.close(); //stop
     
            httpURLConnection.disconnect();//déconecter
            return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            }
            return jsonParser2;
            }
     
    @Override
    protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            }
     
    @Override
    protected void onPostExecute(String result)//Donne le résultat
            {
     
            returnValueImpl.renvoyerValeurString(result);
     
     
            }
     
            public void setReturnListener(ReturnValue returnListener) {
                    this.returnValueImpl = returnListener;
            }
     
            public interface ReturnValue {
        abstract String renvoyerValeurString(String valeurARenvoyer);
            }
     
    }
    L'ensemble marche mais pour savoir car j'ai suivies vos conseils mais de fois sans trop comprendre si vous pouvez m'expliquer ces lignes de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       public interface ReturnValue {
        abstract String renvoyerValeurString(String valeurARenvoyer);
            }
    C'est pour que la variable ValeurARenvoyer du fichier java BackgroundTask sois mis dans la méthode renvoyerValeurString du fichier java MainActivity??? c'est pour sa que on instancie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mBackgroundTask.setReturnListener(this);
    D'ailleur @MasterMbg tu me dis
    Chaque classe est un fichier à part dans ton projet. Tu auras donc MainActivity.java, ReturnValue.java et TaskAsync.java. Trois fichiers différents
    Mais j'ai que deux fichier java qui sont BackgroundTask et MainActivity ou je me trompe?

    Et donc si j'ai bien compris pour mon histoire de TextView dans ce cas la je ne pourrais pas l'appeller dans onCreate car c'est la première méthode qui créer et appeler quand le programme compile? (je m'en doutais un peu ) Donc je serais obliger de afficher mon flux json dans la méthode renvoyerValeurString du fichier MainActivity car elle est appeler après le onCreate.

Discussions similaires

  1. [Android Studio] Problème d'affichage de carte Google Maps
    Par yoss.ra dans le forum Android Studio
    Réponses: 1
    Dernier message: 04/11/2016, 17h04
  2. [Android studio] Problème UDP Coté client
    Par yap66 dans le forum Android Studio
    Réponses: 6
    Dernier message: 11/09/2015, 12h02
  3. [Android Studio] Problème de débogage
    Par CharleLéo dans le forum Android Studio
    Réponses: 21
    Dernier message: 29/08/2015, 13h20
  4. [Android-Studio] Problème à la création de projet (jdk)
    Par stc074 dans le forum Android Studio
    Réponses: 2
    Dernier message: 30/11/2014, 21h35
  5. débutant android studio problème
    Par giovanni dans le forum Android Studio
    Réponses: 2
    Dernier message: 19/01/2014, 23h27

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