Android 如何将JSON转换为DirectionRoute

Android 如何将JSON转换为DirectionRoute,android,json,navigation,mapbox,mapbox-android,Android,Json,Navigation,Mapbox,Mapbox Android,我正在用Android的mapbox API开发一个简单的导航器。 我正在使用Playway创建一些路由,我想使用生成的JSON生成一个DirectionsRoute对象。 因此,我调用了DirectionsRoute.fromJson(),但当我这样做时,应用程序会因以下错误而崩溃: E/Mbgl-MapChangeReceiver: Exception in onDidFinishLoadingStyle java.lang.NullPointerException: Null distan

我正在用Android的mapbox API开发一个简单的导航器。 我正在使用Playway创建一些路由,我想使用生成的JSON生成一个
DirectionsRoute
对象。 因此,我调用了
DirectionsRoute.fromJson()
,但当我这样做时,应用程序会因以下错误而崩溃:

E/Mbgl-MapChangeReceiver: Exception in onDidFinishLoadingStyle
java.lang.NullPointerException: Null distance
    at com.mapbox.api.directions.v5.models.$AutoValue_DirectionsRoute.<init>($AutoValue_DirectionsRoute.java:45)
    at com.mapbox.api.directions.v5.models.AutoValue_DirectionsRoute.<init>(AutoValue_DirectionsRoute.java:27)
    at com.mapbox.api.directions.v5.models.AutoValue_DirectionsRoute$GsonTypeAdapter.read(AutoValue_DirectionsRoute.java:260)
    at com.mapbox.api.directions.v5.models.AutoValue_DirectionsRoute$GsonTypeAdapter.read(AutoValue_DirectionsRoute.java:30)
    at com.google.gson.Gson.fromJson(Gson.java:932)
    at com.google.gson.Gson.fromJson(Gson.java:897)
    at com.google.gson.Gson.fromJson(Gson.java:846)
    at com.google.gson.Gson.fromJson(Gson.java:817)
    at com.mapbox.api.directions.v5.models.DirectionsRoute.fromJson(DirectionsRoute.java:172)
    at eu.mediator.hmi.cluster2.navigator.Nav.getDirectionsRoute(Nav.kt:108)
    at eu.mediator.hmi.cluster2.navigator.Nav.access$getDirectionsRoute(Nav.kt:15)
    at eu.mediator.hmi.cluster2.navigator.Nav$route$2.invoke(Nav.kt:19)
    at eu.mediator.hmi.cluster2.navigator.Nav$route$2.invoke(Nav.kt:19)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at eu.mediator.hmi.cluster2.navigator.Nav.getRoute(Nav.kt:19)
    at eu.mediator.hmi.cluster2.navigator.Nav.onNavigationReady(Nav.kt:83)
    at com.mapbox.navigation.ui.NavigationView.updateNavigationReadyListeners(NavigationView.java:701)
    at com.mapbox.navigation.ui.NavigationView.lambda$onMapReady$0$NavigationView(NavigationView.java:261)
    at com.mapbox.navigation.ui.-$$Lambda$NavigationView$cQ4pEaxGsKIc0JZPsHECDoNZqgE.onStyleLoaded(Unknown Source:4)
    at com.mapbox.mapboxsdk.maps.MapboxMap.notifyStyleLoaded(MapboxMap.java:963)
    at com.mapbox.mapboxsdk.maps.MapboxMap.onFinishLoadingStyle(MapboxMap.java:225)
    at com.mapbox.mapboxsdk.maps.MapView$MapCallback.onDidFinishLoadingStyle(MapView.java:1383)
    at com.mapbox.mapboxsdk.maps.MapChangeReceiver.onDidFinishLoadingStyle(MapChangeReceiver.java:198)
    at com.mapbox.mapboxsdk.maps.NativeMapView.onDidFinishLoadingStyle(NativeMapView.java:1166)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:326)
    at android.os.Looper.loop(Looper.java:160)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

来自mapbox API的响应不是
DirectionsRoute
。它是
DirectionsResponse
,一种类似以下的结构:

{
    "routes":[ ... ],
    "waypoints":[ ... ],
    "code":"Ok",
    "uuid":"iN7DOXpeBlZLl3bHqiFcXZinCTs9_4miufia3aF9gVodZF3QZ-c0lQ=="
}
DirectionsRoute route = directionsResponse.routes().get(0);
因此,您无法使用
DirectionsRoute.fromJson()解析此内容

响应在
的“路由”
属性中包含一个
方向路由的列表。通常第一个是使用的。要解析此项,请使用

directionsResponse = DirectionsResponse.fromJson();
然后,您可以得到响应中的第一条路径,如下所示:

{
    "routes":[ ... ],
    "waypoints":[ ... ],
    "code":"Ok",
    "uuid":"iN7DOXpeBlZLl3bHqiFcXZinCTs9_4miufia3aF9gVodZF3QZ-c0lQ=="
}
DirectionsRoute route = directionsResponse.routes().get(0);

在从Json获取数据之前,请检查所有字段是否为非空。如果不为空,请获取数据。我有一个Json字符串,当我调用DirectionsRoute.fromJson()时,它会崩溃。如何检查所有字段是否都不是空的?请在此处签出()它会在
空距离
时崩溃。因此,
distance
字段缺少所需的位置。编辑您的问题并发布JSON,或者将其放在某个地方并发布指向该问题的链接。@DavidWasser感谢您的评论。我添加了一个json示例。无论如何,生成的每个json都会抛出我显示的错误。