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 .
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);
}
}
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 :
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.
× 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.
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog