2016-03-12 1 views
0

Im implémentation de l'analyse des résultats des directions de google dans les classes de modèles Java.Création d'un niveau de classe statique interne supérieur

HttpRequest request = requestFactory.buildGetRequest(url); 
HttpResponse httpResponse = request.execute(); 
DirectionsResult directionsResult=httpResponse.parseAs(DirectionsResult.class); 

... 

public static class DirectionsResult { 
    @Key 
    public List<Route> routes; 
} 

public static class Route { 
    @Key 
    public List<Leg> legs; 
} 

public static class Leg { 
    @Key 
    public Distance distance; 

    @Key 
    public Duration duration; 

} 

public static class Distance 
{ 
    @Key 
    public String text; 
} 

public static class Duration 
{ 
    @Key 
    public String text; 
} 


    ... 

Pour acess les données que je peux ensuite utiliser:

Log.d(TAG,"directions result distance text: "+directionsResult.routes.get(0).legs.get(0).distance.text); 

Ma question est de savoir comment créer la classe de niveau supérieur séparé appelé DirectionsResult et acess ses variables membres?

J'ai essayé mimer le comportement de la classe statique de classe supérieure, mais sans succés, a été d'obtenir l'erreur ...

Répondre

0

Vous créez un nouveau fichier Java DirectionResults.java. Vous copiez la classe exactement telle quelle, en supprimant le mot-clé static de la ligne qui déclare la classe. Ajoutez la ligne de paquet normale et toutes les importations nécessaires. C'est tout ce que vous devriez faire.

public class DirectionsResult { 
    @Key 
    public List<Route> routes; 
} 
+0

Ou cliquez simplement sur le nom de la classe et appuyez sur F6 pour vous déplacer. – nasch

+0

En supposant qu'il utilise le même IDE que vous. Et c'est la même touche de raccourci dans la version qu'il utilise –

+0

Oui, en supposant qu'il utilise le seul IDE pris en charge par Google et n'a pas remappé les clés en quelque sorte. Assez sûr qu'ils sont les mêmes sur toutes les plateformes. – nasch

0

@Gabe Séchan: Je l'ai déjà essayé et im obtenir l'erreur suivante:

03-12 20:04:14.159 12525-12917/com.rootcave.roadpal W/System.err: java.lang.IllegalArgumentException: key value 
03-12 20:04:14.159 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parse(JsonParser.java:381) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parse(JsonParser.java:354) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.rootcave.roadpal.ride.createRide.CreateRideInteractorImpl$DirectionsFetcher.doInBackground(CreateRideInteractorImpl.java:231) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.rootcave.roadpal.ride.createRide.CreateRideInteractorImpl$DirectionsFetcher.doInBackground(CreateRideInteractorImpl.java:189) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at java.lang.Thread.run(Thread.java:856) 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: key value, field public java.util.List com.rootcave.roadpal.ride.createRide.DirectionsResultModel.routes 
03-12 20:04:14.163 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.167 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parse(JsonParser.java:471) 
03-12 20:04:14.167 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:780) 
03-12 20:04:14.167 12525-12917/com.rootcave.roadpal W/System.err: ... 14 more 
03-12 20:04:14.167 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: key value, field public java.util.List com.rootcave.roadpal.ride.createRide.DirectionsResultModel.routes 
03-12 20:04:14.171 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.171 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseArray(JsonParser.java:647) 
03-12 20:04:14.171 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:739) 
03-12 20:04:14.171 12525-12917/com.rootcave.roadpal W/System.err: ... 16 more 
03-12 20:04:14.171 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: key value, field public java.util.List com.rootcave.roadpal.ride.createRide.DirectionsResultModel$Route.legs 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parse(JsonParser.java:471) 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:780) 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err: ... 18 more 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: key value, field public java.util.List com.rootcave.roadpal.ride.createRide.DirectionsResultModel$Route.legs 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseArray(JsonParser.java:647) 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:739) 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err: ... 20 more 
03-12 20:04:14.175 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: key value, field public com.rootcave.roadpal.ride.createRide.DirectionsResultModel$Distance com.rootcave.roadpal.ride.createRide.DirectionsResultModel$Leg.distance 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parse(JsonParser.java:471) 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:780) 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err: ... 22 more 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: key value, field public java.lang.String com.rootcave.roadpal.ride.createRide.DirectionsResultModel$Distance.value 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880) 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parse(JsonParser.java:471) 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:780) 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err: ... 24 more 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err: Caused by: java.lang.IllegalArgumentException: expected numeric type but got class java.lang.String 
03-12 20:04:14.179 12525-12917/com.rootcave.roadpal W/System.err:  at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:843) 
03-12 20:04:14.183 12525-12917/com.rootcave.roadpal W/System.err: ... 26 more 

erreur se produit dans cette ligne:

DirectionsResultModel directionsResultModel = httpResponse.parseAs(DirectionsResultModel.class); 

Ceci est im réponse JSON en essayant d'analyser , je suis intéressé par les champs de distance et de durée du voyage:

http response parse as string: { 
                   "geocoded_waypoints" : [ 
                    { 
                     "geocoder_status" : "OK", 
                     "place_id" : "ChIJhQEXk8ZXY0cRUnc0gzfpLX0", 
                     "types" : [ "locality", "political" ] 
                    }, 
                    { 
                     "geocoder_status" : "OK", 
                     "place_id" : "ChIJj7jA0mL6YUcRhAf0Exw-MhI", 
                     "types" : [ "locality", "political" ] 
                    } 
                   ], 
                   "routes" : [ 
                    { 
                     "bounds" : { 
                      "northeast" : { 
                      "lat" : 45.3581754, 
                      "lng" : 15.543227 
                      }, 
                      "southwest" : { 
                      "lat" : 44.118924, 
                      "lng" : 14.2724169 
                      } 
                     }, 
                     "copyrights" : "Map data ©2016 Google", 
                     "legs" : [ 
                      { 
                      "distance" : { 
                       "text" : "243 km", 
                       "value" : 243413 
                      }, 
                      "duration" : { 
                       "text" : "4 hours 2 mins", 
                       "value" : 14529 
                      }, 
                      "end_address" : "Zadar, Croatia", 
                      "end_location" : { 
                       "lat" : 44.117578, 
                       "lng" : 15.219711 
                      }, 
                      "start_address" : "Lovran, Croatia", 
                      "start_location" : { 
                       "lat" : 45.2969573, 
                       "lng" : 14.2724169 
                      }, 
                      "steps" : [ 
                       { 
                        "distance" : { 
                         "text" : "0.1 km", 
                         "value" : 136 
                        }, 
                        "duration" : { 
                         "text" : "1 min", 
                         "value" : 28 
                        }, 
                        "end_location" : { 
                         "lat" : 45.2961227, 
                         "lng" : 14.2724438 
                        }, 
                        "html_instructions" : "Head \u003cb\u003esoutheast\u003c/b\u003e on \u003cb\u003eLokva ul.\u003c/b\u003e", 
                        "polyline" : { 
                         "points" : "[email protected]@P[[email protected]@" 
                        }, 
                        "start_location" : { 
                         "lat" : 45.2969573, 
                         "lng" : 14.2724169 
                        }, 
                        "travel_mode" : "DRIVING" 
                       }, 
                       { 
                        "distance" : { 
                         "text" : "66 m", 
                         "value" : 66 
                        }, 
                        "duration" : { 
                         "text" : "1 min", 
                         "value" : 18 
                        }, 
                        "end_location" : { 
                         "lat" : 45.2956534, 
                         "lng" : 14.2729462 
                        }, 
                        "html_instructions" : "Turn \u003cb\u003eleft\u003c/b\u003e toward \u003cb\u003eUl. dr. Nilo cara\u003c/b\u003e", 
                        "maneuver" : "turn-left", 
                        "polyline" : { 
                         "points" : "w{[email protected]@RQVQ" 
                        }, 
                        "start_location" : { 
                         "lat" : 45.2961227, 
                         "lng" : 14.2724438 
                        }, 
                        "travel_mode" : "DRIVING" 
                       }, 
                       { 
                        "distance" : { 
                         "text" : "0.7 km", 
                         "value" : 671 
                        }, 
                        "duration" : { 
                         "text" : "2 mins", 
                         "value" : 144 
                        }, 
                        "end_location" : { 
                         "lat" : 45.2968208, 
                         "lng" : 14.2758713 
                        }, 
                        "html_instructions" : "Turn \u003cb\u003eleft\u003c/b\u003e onto \u003cb\u003eUl. dr. Nilo cara\u003c/b\u003e", 
                        "maneuver" : "turn-left", 
                        "polyline" : { 
                         "points" : "yxmsG}tbvAE][email protected][[email protected][email protected]]|A[[email protected]?KAIQ 

Modifier: im en utilisant studio Android

Edit: Il était très simple erreur, ce dernier regard est de la classe:

public class DirectionsResultModel { 
@Key("routes") 
private List<Route> routes; 

public List<Route> getRoutes() { 
    return routes; 
} 

public static class Route { 
    @Key("legs") 
    private List<Leg> legs; 

    public List<Leg> getLegs() {return legs;} 
} 

public static class Leg { 
    @Key("distance") 
    private Distance distance; 

    @Key("duration") 
    private Duration duration; 

    public Distance getDistance() { 
     return distance; 
    } 
    public Duration getDuration() { 
     return duration; 
    } 

} 

public static class Distance { 
    @Key 
    private String text; 
    @Key 
    private int value; 

    public int getValue() {return value;} 
    public String getText() {return text;} 
} 

public static class Duration { 
    @Key 
    private String text; 
    @Key 
    private int value; 

    public String getText() {return text;} 
    public int getValue() {return value;} 

} 
} 

Merci à tous!

+0

Je n'ai pas inspecté le JSON, mais il dit qu'un de ces champs est défini comme un nombre dans le modèle Java et qu'il s'agit d'une chaîne non numérique dans le JSON. – nasch

+0

ouais j'ai ajouté la valeur de champs de chaîne dans la classe de distance et dans la classe de durée et ils devraient être int et parce que cette erreur s'est produite. C'était vraiment erreur simple, j'aurais dû inspecter le journal d'erreur plus étroitement. Merci à tous –