Mapbox Directions API返回状态代码为422的无法使用的响应

时间:2016-05-25 14:33:11

标签: android mapbox directions

我正在使用MapBox Directions with android,我正试图获取以后在地图上绘制的方向。

但是,我从调用中得到的响应永远不能用作response.body()返回null。

当我调用response.code()时,我得到状态代码 422 ,根据Mapbox API意味着“给定的请求无效。响应的消息键将保留解释无效输入。“

response.message()返回字符串“Unknown”。

response.errorBody()返回字符串“okhttp3.ResponseBody$1@38fb6f04”

我使用了与this stack overflow answer相同的代码,它应该有效,但事实并非如此。任何帮助,将不胜感激。

继承我的方法:

    private void getRoute(Position origin, Position destination) throws ServicesException {

    MapboxDirections client = new MapboxDirections.Builder()
            .setOrigin(origin)
            .setDestination(destination)
            .setProfile(DirectionsCriteria.PROFILE_CYCLING)
            .setAccessToken("Same access token as the map uses")
            .build();

    client.enqueueCall(new Callback<DirectionsResponse>() {
        @Override
        public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
            // You can get the generic HTTP info about the response
            Log.d(TAG, "Response code: " + response.code());
            if (response.body() == null) {
                Log.e(TAG, "No routes found, make sure you set the right user and access token.");
                return;
            }

            // Print some info about the route
            currentRoute = response.body().getRoutes().get(0);
            Log.d(TAG, "Distance: " + currentRoute.getDistance());
            Toast.makeText(MainActivity.this, "Route is " +  currentRoute.getDistance() + " meters long.", Toast.LENGTH_SHORT).show();

            // Draw the route on the map
            drawRoute(currentRoute);
        }

        @Override
        public void onFailure(Call<DirectionsResponse> call, Throwable t) {
            Log.e(TAG, "Error: " + t.getMessage());
            Toast.makeText(MainActivity.this, "Error: " + t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

我的进口商品:

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import com.mapbox.services.directions.v5.DirectionsCriteria;
import com.mapbox.services.directions.v5.MapboxDirections;
import com.mapbox.services.directions.v5.models.DirectionsResponse;
import com.mapbox.services.directions.v5.models.DirectionsRoute;

我的朋友们:

    compile ('com.mapbox.mapboxsdk:mapbox-android-services:1.0.0@aar'){
    transitive=true
}

我尝试过不同国家/地区的不同职位,以及新的访问权限,并启用了具有相同结果的ass权限。我究竟做错了什么?

非常感谢。

2 个答案:

答案 0 :(得分:6)

在构建Position对象时,检查是否以正确的方式设置纬度和经度。

构造函数很重要。

Position pos = Position.fromCoordinates(/*LON FIRST*/lon, /*LAT SECOND*/ lat);

示例:

Position origin = Position.fromCoordinates(location.getLongitude(),location.getLatitude());

希望对您或未来的顾问有所帮助。

答案 1 :(得分:1)

您似乎仍在使用1.0.0,我们已更新至1.1.0,从而为方向V5带来稳定性。如果更新没有解决问题,您可能会以错误的顺序传递您的出发地/目的地坐标,它应该是经度,纬度;不是纬度,经度。最后,如果这不能解决问题,我很乐意查看实际的网址请求,是否可以将其打印到日志中并编辑您的问题。