当没有选择任何内容时,PlacePicker活动不会调用`onActivityResult`

时间:2015-05-23 14:18:24

标签: java android google-maps android-activity google-places-api

以下是我尝试过的代码,但是当用户没有选择任何内容并返回时,活动不会调用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活动中的默认后退按钮时,我看不到任何一个叫做的吐司

根据文档,它应该将place.getplace()返回为null

  

当用户选择地点时,您可以通过调用PlacePicker.getPlace()来检索该地点。如果用户未选择位置,则该方法将返回null。

这意味着它应该转到onActivityResult(),但就我的情况而言,并没有选择任何地方,它不会来onActivityResult()

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我认为你错过了其他声明

    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
}

答案 1 :(得分:1)

当您的应用程序在主线程上工作的网络上工作时,这是一个主要问题,由于应用程序与主线程的业务关系,它不会在UI上呈现适当的结果。为此,请检查android的AsyncTask类,它将帮助您完成工作。

你可以查看youtube链接:

Async Task implementation

Android documentation for Async Task

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

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

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

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