未选择任何内容时,PlacePicker activity 不会调用 `onActivityResult`

PlacePicker activity doesn't call `onActivityResult` when nothing is selected

这是我试过的代码,但是当用户没有 select 任何东西而只是 return 返回时 activity 没有调用 onActivityResult()方法

我将 PlacePIcker 命名为

googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng latLng) {
        try {
            googleMap.clear();
            PlacePicker.IntentBuilder intentBuilder =
                    new PlacePicker.IntentBuilder();
            Intent intent = intentBuilder.build(getApplicationContext());
            startActivityForResult(intent, 5);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }
    }
});

onActivityResult()方法

if (requestCode == 5 && resultCode == RESULT_OK) {
    Toast.makeText(this,"here",Toast.LENGTH_SHORT).show();
    if (data != null) {
        Place place = PlacePicker.getPlace(data, this);
        if (place != null) {
            lat = place.getLatLng().latitude;
            lng = place.getLatLng().longitude;
            MarkerOptions marker = new MarkerOptions().position(
                    place.getLatLng()).title("Hello Maps"); marker.icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_RED));
                  googleMap.addMarker(marker);
        } else{
            Toast.makeText(this,"place",Toast.LENGTH_SHORT).show();
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(latitude, longitude)).title("Hello Maps");
            lat = latitude;
            lng = longitude;
            // Changing marker icon
            marker.icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

            // adding marker
            googleMap.addMarker(marker);
        }
    } else{
        Toast.makeText(this,"data",Toast.LENGTH_SHORT).show();
        MarkerOptions marker = new MarkerOptions().position(
                new LatLng(latitude, longitude)).title("Hello Maps");
        lat = latitude;
        lng = longitude;
        // Changing marker icon
        marker.icon(BitmapDescriptorFactory
                .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

        // adding marker
        googleMap.addMarker(marker);
    }

当我单击 placepicker activity 中的默认后退按钮时,我没有看到任何 toast 被调用

根据文档,应该 return 将 place.getplace() 设置为 null

When the user selects a place, you can retrieve the place by calling PlacePicker.getPlace(). If the user has not selected a place, the method will return null.

这意味着它应该去 onActivityResult(),但在我的情况下是在后面而不是 select 它不会到达 onActivityResult().

的任何地方

谁能帮我解决这个问题?

我想你漏掉了一个 else 语句

    if (requestCode == 5 && resultCode == RESULT_OK) {
        Toast.makeText(this,"here",Toast.LENGTH_SHORT).show();
        if (data != null) {
            Place place = PlacePicker.getPlace(data, this);
            if (place != null) {
                lat = place.getLatLng().latitude;
                lng = place.getLatLng().longitude;
                MarkerOptions marker = new MarkerOptions().position(
                        place.getLatLng()).title("Hello Maps"); marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_RED));
                      googleMap.addMarker(marker);
            } else{
                Toast.makeText(this,"place",Toast.LENGTH_SHORT).show();
                MarkerOptions marker = new MarkerOptions().position(
                        new LatLng(latitude, longitude)).title("Hello Maps");
                lat = latitude;
                lng = longitude;
                // Changing marker icon
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

                // adding marker
                googleMap.addMarker(marker);
            }
        } else{
            Toast.makeText(this,"data",Toast.LENGTH_SHORT).show();
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(latitude, longitude)).title("Hello Maps");
            lat = latitude;
            lng = longitude;
            // Changing marker icon
            marker.icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

            // adding marker
            googleMap.addMarker(marker);
        }
}else if(requestCode == 5 && resultCode == RESULT_CANCELED){
    // handle no selection here
}

当您的应用程序在主线程上运行的网络上运行并且由于应用程序与主线程的业务而无法在 UI 上呈现适当的结果时,这是一个主要问题。为此,请检查 android 的 AsyncTask class,它将帮助您完成工作。

你可以查看 youtube link:

Async Task implementation

Android documentation for Async Task

只是为了让您快速了解异步任务,它将实现三个函数,并且在您想调用此操作以在侧线程上发生的按钮上,您可以使用 AsyncTask.execute (), 然而:

1) doInBackground() -> 您的地图函数将在此处调用。

2) onPreExecute() -> 任务或 UI 在调用 doInBackground 之前更新。

3) onPostExecute() -> 在 doInBackground 完成它的工作后。