当前位置: 首页 > 知识库问答 >
问题:

Mapbox方向API返回状态代码为422的不可用响应

贺山
2023-03-14

我在android上使用MapBox方向图,我只是想得到以后在地图上绘制的方向图。

但是,我从调用中得到的响应从来都不可用,因为response.body()返回null。

当我打电话回应时。code()我得到状态代码422,根据Mapbox API,这意味着“给定的请求无效。响应的消息键将包含对无效输入的解释。”

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

response.errorbody()返回字符串"okhttp. p3.反应体$1@38fb6f04"

我使用了与这个堆栈溢出答案相同的代码,它应该可以工作,但它不能。如果有任何帮助,我们将不胜感激。

以下是我的方法:

    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个答案

勾安翔
2023-03-14

看起来您正在使用1.0.0但是,我们已经更新到1.1.0,这为V5带来了稳定性。如果更新不能解决问题,您可能以错误的顺序传递了起点/终点坐标,它应该是经度、纬度;不是纬度,是经度。最后,如果这不能解决问题,我想看看实际的url请求,你能把它打印到日志中并编辑你的问题吗。

施振海
2023-03-14

在生成位置对象时,检查是否以正确的方式设置了纬度和经度。

承包商很重要。

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

例子:

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

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

 类似资料:
  • 我有一个Restendpoint,如果没有产品,它将返回204,以及以下通用角度服务: 和 但是,当服务生成 204 代码时,我收到以下错误: TypeError:无法读取null的属性“status” 这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?

  • 我想发布api.discogs.com/marketplace/listings?...在爪哇。 当我试图创建一个新的列表帖子时,结果是“返回了一个响应状态为422 null”。 谢谢大家!

  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头

  • 我在Android应用程序中使用Mapbox,需要在地图上显示从A点到B点的方向。 我知道Mapbox提供的方向应用编程接口。但是我不能在我的应用程序中使用它,因为包括“com.mapbox.mapboxsdk: mapbox-Android-方向:1.0.0@aar”它在gradle文件中与我的应用程序中的另一个依赖项冲突(不同版本的改造)。 所以我不得不使用API方法。我发出一个url GET

  • 因为它创建了一个新的资源,所以如果它返回状态代码201是合适的,但目前它返回200。 我发现如何设置状态代码的唯一方法是让方法返回一个并在那里设置它,但我确实不希望我的所有接口返回一个泛型响应,而不是实际的响应对象(在本例中是)。

  • 我正在尝试使用BitBucket GIT存储库设置Jenkins,但Jenkins控制台总是给我以下错误代码: 我尝试过很多不同的方法,但总是失败。我的服务器上允许9418端口上的通信量。服务器处于1 Gbps连接上。