Android 如何将JSON转换为DirectionRoute
我正在用Android的mapbox API开发一个简单的导航器。 我正在使用Playway创建一些路由,我想使用生成的JSON生成一个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
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都会抛出我显示的错误。