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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 très 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 : 29
    Localisation : Congo-Kinshasa

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

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

  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
    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 averti
    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
    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
    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 averti
    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
    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

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, 16h04
  2. [Android studio] Problème UDP Coté client
    Par yap66 dans le forum Android Studio
    Réponses: 6
    Dernier message: 11/09/2015, 11h02
  3. [Android Studio] Problème de débogage
    Par CharleLéo dans le forum Android Studio
    Réponses: 21
    Dernier message: 29/08/2015, 12h20
  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, 20h35
  5. débutant android studio problème
    Par giovanni dans le forum Android Studio
    Réponses: 2
    Dernier message: 19/01/2014, 22h27

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