Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec json

java.lang.String org.json.JSONArray.toString()

    30 mars 2019 à 18:52:31

    Bonjour à tous,

    Je voudrais avoir un petit coude de main pour ce qui concerne Json sous android.
    J'essaie de crée une appli pour apprendre comment fonctionne le google maps sous android jusqu'ici tout à aller bien sauf quand j'essaie de faire la durée sur une distance, là tout tombe et on m'affiche un problème sur le Json.

    J'ai cherché sur internet, j'ai vu quelque piste que j'ai ajouté mais rien n'a changé.
    Voici le lien complet de mon code (extension java) si vous pouvez m'aidez sur ce problème :euh:.

    Lien -> https://pastebin.com/u/FrTab

    Merci d'avance pour l'aide.

    Voici une petite partie de mon code où tout plante:

    package com.example.ftabo.google_maps;
    
    import android.util.Log;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    
    /**
     * Created by ftabo on 28/03/2019.
     */
    //Cette classe est un analyseur de données
    public class DataParser {
    
        //Cette methode retourne la Direction du map de google
        private HashMap<String,String> getDuration(JSONArray googleDirectionsJson)
        {
            HashMap<String,String> googleDirectionsMap = new HashMap<>();
            String Duree = "";
            String Distance = "";
    
            Log.d("json response", googleDirectionsJson.toString());
            try {
                Duree = googleDirectionsJson.getJSONObject(0).getJSONObject("Duree").getString("texte");
                Distance = googleDirectionsJson.getJSONObject(0).getJSONObject("Distance").getString("texte");
    
                googleDirectionsMap.put("Duree ", Duree);
                googleDirectionsMap.put("Distance ", Distance);
    
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            return googleDirectionsMap;
        }
    
        private HashMap<String, String> getPlace(JSONObject googlePlaceJson)
        {
            HashMap<String, String> googlePlacesMap = new HashMap<>();
    
            String placeName= "-NA-";
            String vicinity = "-NA-";
            String latitude = "";
            String longitude = "";
            String reference = "";
            Log.d("getPlace","Entré");
    
            try {
                if(!googlePlaceJson.isNull("nom"))
                {
                   placeName = googlePlaceJson.getString("nom");
                }
                if(!googlePlaceJson.isNull("vicinity"))
                {
                    vicinity = googlePlaceJson.getString("vicinity");
                }
    
                latitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lat");
                longitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lng");
    
                reference = googlePlaceJson.getString("reference");
    
                googlePlacesMap.put("Place_name", placeName);
                googlePlacesMap.put("vicinity", vicinity);
                googlePlacesMap.put("lat", latitude);
                googlePlacesMap.put("lng", longitude);
                googlePlacesMap.put("reference", reference);
    
    
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
    
            return googlePlacesMap;
        }
    
        /**
         * Explication methode private et public
         *
         * Dans cette methode on prends JsonArray
         * La methode getPlaces (obtenir les lieux) va appelé getPlace qui utilise la boucle for
         * Il va allé chercher chaque element depuis JsonArray pour chaque place
         * Il va stocker dans la liste de lieu (methode List
         * il va le retourner à la méthode d'analyse (parse(...))
         *
         * */
    
        private List<HashMap<String, String>> getPlaces(JSONArray jsonArray)
        {
            //Déclarations
            int count = jsonArray.length();
            List<HashMap<String, String>> placesList = new ArrayList<>(); //initialisation
            HashMap<String,String> placeMap = null;
    
            //Cette boucle permet de recuperer chaque adresse et les ajouter dans la liste d'emplacement du map
    
            if(jsonArray != null){
    
                for(int i = 0; i<count; i++)
                {
                    try {
                        placeMap = getPlace((JSONObject) jsonArray.get(i));
                        placesList.add(placeMap);
                    }
                    catch (JSONException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
    
            //On retourne la liste de place qui ont été trouver par la boucle for
            return placesList;
        }
    
        //Methode pour la liste de lieu
        public List<HashMap<String,String>> parse(String jsonData)
        {
            //Declaration des objets
            JSONArray jsonArray = null;
            JSONObject jsonObject;
    
            //Initialisation de jsonObject et gestion des erreurs
            try {
                jsonObject = new JSONObject(jsonData);
                jsonArray = jsonObject.getJSONArray("Résultat !");
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            //On retourne la methode getPlaces
            return getPlaces(jsonArray);
        }
    
        public HashMap<String,String> parseDirections(String jsonData)
        {
            //Declaration des objets
            JSONArray jsonArray = null;
            JSONObject jsonObject = null;
    
            try
            {
                jsonObject = new JSONObject(jsonData);
    
                //legs array
                jsonArray = jsonObject.getJSONArray("routes").getJSONObject(0).getJSONArray("legs");
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            return getDuration(jsonArray);
    
        }
    
    }
    package com.example.ftabo.google_maps;
    
    import android.os.AsyncTask;
    
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.MarkerOptions;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;
    
    /**
     * Created by ftabo on 30/03/2019.
     */
    
    public class GetDirectionData extends AsyncTask<Object,String,String> {
    
        //Declaration des variables
        GoogleMap mMap;
        String url;
        String googleDirectionsData;
        String Duree, Distance;
        LatLng latLng;
    
        //Cette methode se passe en background qui est caché aux de l'utilisateur
        //Il retourne les donnée de direction via google
        @Override
        protected String doInBackground(Object... objects) {
            mMap = (GoogleMap)objects[0];
            url = (String)objects[1];
            latLng = (LatLng)objects[2];
    
            DownloadUrls downloadUrls = new DownloadUrls();
            try {
                googleDirectionsData = downloadUrls.LireUrl(url);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return googleDirectionsData;
        }
    
        //invoqué sur le thread d'interface utilisateur une fois le calcul d'arrière-plan terminé.
        @Override
        protected void onPostExecute(String s)
        {
            HashMap<String,String> directionsList = null;
            DataParser parser = new DataParser();
            directionsList = parser.parseDirections(s);
            Duree = directionsList.get("Duree");
            Distance = directionsList.get("Distance");
    
            mMap.clear();
            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.draggable(true);
            markerOptions.title("Duree = "+Duree);
            markerOptions.snippet("Distance = "+Distance);
    
    
            //On ajoute le marker dans la map
            mMap.addMarker(markerOptions);
    
        }
    }
    




    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2019 à 9:37:45

      Salut,

      Qu'entends-tu par tout tombe et on m'affiche un problème sur le Json ?

      As-tu un message d'erreur qui s'affiche ? Si oui, copie le ici.

      • Partager sur Facebook
      • Partager sur Twitter
        2 avril 2019 à 7:34:31

        Salut,

        Déjà je vous remercie pour votre réponse et pour ce qui es de l'application, quand j'ai dis tout tomber ça veut dire que l'application s'arrête quand je clic sur destination et on affiche un message d'erreur que voici : 

        https://scontent-cdt1-1.xx.fbcdn.net/v/t1.15752-9/55795186_1204161876420427_6243116551105413120_n.png?_nc_cat=108&_nc_ht=scontent-cdt1-1.xx&oh=04632c75a6cfc82570e56344996869b5&oe=5D042BDB

        -
        Edité par Envajo_061 2 avril 2019 à 7:50:16

        • Partager sur Facebook
        • Partager sur Twitter
          3 avril 2019 à 9:22:02

          Tu as une NullPointerException à la la ligne 27 de ton code. Tu appelles la méthode toString() sur une variable qui est null.
          • Partager sur Facebook
          • Partager sur Twitter
            4 avril 2019 à 22:02:30

            Merci pour remarque.

            Et que faire ?

            Pourriez-vous m'aider à trouver s'il vous plaît ??

            • Partager sur Facebook
            • Partager sur Twitter
              5 avril 2019 à 9:06:20

              J'imagine que tu tombes dans le catch de ta méthode parseDirections et donc que le logcat affiche une stacktrace. Il convient de la lire ou de la donner pour qu'on puisse l'interpréter.
              • Partager sur Facebook
              • Partager sur Twitter

              Problème avec json

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown