首页 > 解决方案 > Android Yandex Mapkit 按点或按名称搜索请求总是返回空值,为什么?

问题描述

这是我在地图上点击以获取点击点坐标并发送搜索请求以了解有关该地点的更多详细信息的示例,例如城市、街道。但响应始终为空值。

public class MainActivity extends AppCompatActivity implements CameraListener, InputListener, Session.SearchListener {

    private ActivityMainBinding binding;
    private SearchManager searchManager;
    private Session searchSession;
    private SearchOptions searchOptions;
    private MapObjectCollection mapObjectCollection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MapKitFactory.setApiKey("your api key");
        MapKitFactory.initialize(this);
        searchOptions = new SearchOptions();
        searchOptions.setSearchTypes(SearchType.GEO.value);
        searchOptions.setGeometry(true);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        binding.mapview.getMap().setNightModeEnabled((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES);

        searchManager = SearchFactory.getInstance().createSearchManager(SearchManagerType.COMBINED);
        binding.mapview.getMap().addCameraListener(this);
        binding.mapview.getMap().addInputListener(this);
        mapObjectCollection = binding.mapview.getMap().getMapObjects();

        binding.mapview.getMap().move(
                new CameraPosition(new Point(55.751574, 37.573856), 11.0f, 0.0f, 0.0f),
                new Animation(Animation.Type.SMOOTH, 0),
                null);
    }

    @Override
    protected void onStop() {
        super.onStop();
        binding.mapview.onStop();
        MapKitFactory.getInstance().onStop();
    }

    @Override
    protected void onStart() {
        super.onStart();
        binding.mapview.onStart();
        MapKitFactory.getInstance().onStart();
    }

    public void submitQueryByName(String query) {
        searchSession = searchManager.submit(
                query,
                Geometry.fromPoint(new Point(40.177200, 44.503490)),
                searchOptions,
                this);
    }

    public void submitQueryByPoint(Point point) {
        searchSession = searchManager.submit(
                point,
                11,
                searchOptions,
                this);
    }

    @Override
    public void onCameraPositionChanged(@NonNull Map map, @NonNull CameraPosition cameraPosition, @NonNull CameraUpdateReason cameraUpdateReason, boolean finished) {
        Log.e("onCameraPositionChanged"," cameraPosition: "+cameraPosition+" cameraUpdateReason: "+cameraUpdateReason+" finished: "+finished);
    }

    @Override
    public void onMapTap(@NonNull Map map, @NonNull Point point) {
        MapObjectCollection mapObjects = binding.mapview.getMap().getMapObjects();
        mapObjects.clear();

        PlacemarkMapObject placemarkMapObject = mapObjectCollection.addPlacemark(new Point(point.getLatitude(), point.getLongitude()),
                ImageProvider.fromResource(this, R.mipmap.marker_flag));

        submitQueryByPoint(point);
        Log.e("onMapTap", "point lat - lang: " + point.getLatitude() + " : " + point.getLongitude());
    }

    @Override
    public void onMapLongTap(@NonNull Map map, @NonNull Point point) {
        Log.e("onMapLongTap","onMapLongTap");
    }

    @Override
    public void onSearchResponse(@NonNull Response response) {
        try {
            Log.e("Search", "Response: " + response);
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onSearchError(@NonNull Error error) {
        String errorMessage = "unknown_error_message";
        if (error instanceof RemoteError) {
            errorMessage = "remote_error_message";
        } else if (error instanceof NetworkError) {
            errorMessage = "network_error_message";
        }
        Log.e("Response error", " error: " + errorMessage);
    }
}

在 onMapTap 方法中,我获取点击的点坐标并按点发送搜索请求

@Override
    public void onMapTap(@NonNull Map map, @NonNull Point point) {
        MapObjectCollection mapObjects = binding.mapview.getMap().getMapObjects();
        mapObjects.clear();

        PlacemarkMapObject placemarkMapObject = mapObjectCollection.addPlacemark(new Point(point.getLatitude(), point.getLongitude()),
                ImageProvider.fromResource(this, R.mipmap.marker_flag));

        submitQueryByPoint(point);
        Log.e("onMapTap", "point lat - lang: " + point.getLatitude() + " : " + point.getLongitude());
    }

**响应始终为空值。我做错了什么?

这是此示例的 GitHub 整个项目https://github.com/davmehrabyan/YandexMapSearch **

标签: androidyandex-mapkit

解决方案


推荐阅读