意向预期包含一个地方,但不包含 [英] Intent expected to contain a Place, but doesn't

查看:72
本文介绍了意向预期包含一个地方,但不包含的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以相同的请求代码和结果状态调用 onActivityResult()时,使用 AutoComplete.IntentBuilder()不会返回位置.

Use of AutoComplete.IntentBuilder() doesn't return a place when onActivityResult() is called with the same request code and result status.

如果没有任何运气,那么我一直在处理places字段.

I've played around with the places fields if that has to do with anything but no luck.

class MainActivity : AppCompatActivity() {

    private var placeFields = listOf(
        Place.Field.ID,
        Place.Field.NAME,
        Place.Field.ADDRESS,
        Place.Field.LAT_LNG
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            initPlaces()
            setupPlacesAutocomplete()
        }
    }

    private fun setupPlacesAutocomplete() {

        val autocompleteIntent = Autocomplete.IntentBuilder(
            AutocompleteActivityMode.FULLSCREEN,
            placeFields
        ).setTypeFilter(TypeFilter.CITIES).build(this)

        startActivityForResult(autocompleteIntent, 5)
    }

    private fun initPlaces() {
        Places.initialize(this, getString(R.string.places_api))
        val placesClient = Places.createClient(this)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == 5) {
            if (resultCode == AutocompleteActivity.RESULT_OK) {
                val place = Autocomplete.getPlaceFromIntent(intent)
                txt.text = place.name
            }
        }
    }
}

我希望OnActivityResult()应该返回一个位置,但我会得到 java.lang.IllegalArgumentException:预期包含一个位置的意图,但没有.

I expect that OnActivityResult() should return a place but instead I get java.lang.IllegalArgumentException: Intent expected to contain a Place, but doesn't.

推荐答案

 /*-- function to open address search activity --**/
    public void createAutoCompleteIntent() {
        if (getActivity() != null) {
            List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG, Place.Field.ADDRESS);
            Intent intent = new Autocomplete.IntentBuilder(
                    AutocompleteActivityMode.FULLSCREEN, fields)
                    .build(getActivity());
            startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);
        }
    }

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Place place = Autocomplete.getPlaceFromIntent(data);
            if (place.getLatLng() != null) {
                // reverse geoCoding to get Street Address, city,state and postal code

                Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
                try {
                    System.out.println("------addressList-----" + place.getAddress() + "             " + place.getName());
                    List<Address> addressList = geocoder.getFromLocation(
                            place.getLatLng().latitude, place.getLatLng().longitude, 1);
                    System.out.println("------addressList-----" + addressList);
                    if (addressList != null && addressList.size() > 0) {
                        Address address = addressList.get(0);
                        System.out.println("------address-----" + address);
                        addressEd.setText(address.getAddressLine(0));
                        String featureName = "";
                        if (address.getFeatureName()!=null){
                            featureName = address.getFeatureName();
                        }
                        String throughFare = "";
                        if (address.getThoroughfare()!=null){
                            throughFare = address.getThoroughfare();
                        }
                        String streetAddress = featureName + " " + throughFare;
                        streetAddressEd.setText(streetAddress);
                        if (address.getLocality() != null) {
                            cityEd.setText(address.getLocality());
                        } else {
                            callGeoCodeAPI(place.getLatLng().latitude + "," + place.getLatLng().longitude);
                        }
                        stateEd.setText(address.getAdminArea());
                        postCodeEd.setText(address.getPostalCode());
                        countryEd.setText(address.getCountryName());
                    }

                } catch (IOException e) {
                    Log.e(TAG, "Unable connect to Geocoder", e);
                }

            }
        } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
            Status status = Autocomplete.getStatusFromIntent(data);
            if (getActivity() != null) {
                Util.showMessageBar(getActivity(), status.getStatusMessage());
            }
        } else if (resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
        }
    }
}

这篇关于意向预期包含一个地方,但不包含的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆