【问题标题】:Places API Autocomplete onActivityResult never calledPlaces API Autocomplete onActivityResult 从未调用过
【发布时间】:2019-11-20 09:12:36
【问题描述】:

虽然一切都按预期工作,并且我从 Places API 获得了结果,但当用户选择结果时,永远不会调用 onActivityResult 回调。发生的情况是结果出现在搜索文本视图中并且自动完成活动没有退出。我必须按回去才能关闭它。

 // Set the fields to specify which types of place data to return.
            val fields = Arrays.asList(Place.Field.ID, Place.Field.NAME)
            // Start the autocomplete intent.
            val intent: Intent = Autocomplete.IntentBuilder(
                AutocompleteActivityMode.OVERLAY, fields
            ).setTypeFilter(TypeFilter.ADDRESS).
                    setCountry("DE")
                .build(requireContext())
            startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if(data!=null) {
        var status: Status = getStatusFromIntent(data)
        //var place: Place = getPlaceFromIntent(data)
    }
    super.onActivityResult(requestCode, resultCode, data)
}

【问题讨论】:

  • 在此处显示您的代码
  • 确保您使用的是最新版本的 Place 客户端 SDK com.google.android.libraries.places:places:2.1.0。我在您的代码中没有看到任何导致您解决的行为的原因。

标签: android google-places-api googleplacesautocomplete


【解决方案1】:

你是否在 Fragment 中运行 startActivityForResult 方法?看看这个:onActivityResult is not being called in Fragment

【讨论】:

    【解决方案2】:

    您必须在包含您的fragmentActivityoverride onActivityResult

    // In your activity
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
    

    这将致电您的fragment's onActivityResult()

    【讨论】:

      【解决方案3】:

      确保您使用的是最新版本的 Place 客户端 SDK Places 2.1.0 .我在您的代码中看不到任何导致您解决的行为的原因。只需使用以下实现并尝试。

      private fun pickNewPlace() {
              if (!Places.isInitialized()) {
                  Places.initialize(context!!, getString(R.string.google_service_api_key))
              }
      
              // Set the fields to specify which types of place data to return.
              val fields = listOf(Place.Field.ID, Place.Field.NAME)
      
              // Start the autocomplete intent.
              val intent = Autocomplete.IntentBuilder(
                  AutocompleteActivityMode.OVERLAY, fields
              ).setTypeFilter(TypeFilter.ADDRESS).setCountry("DE").build(context!!)
      
              startActivityForResult(intent, REQUEST_CODE_DEFAULT)
          }
      

      onActivityResult 结果处理

      override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
              super.onActivityResult(requestCode, resultCode, data)
      
              if (requestCode == REQUEST_CODE_DEFAULT) {
                  if (resultCode == RESULT_OK) {
                      // Get relevent info from place object 
                      val place = Autocomplete.getPlaceFromIntent(data!!)
      
                  } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
                      val status = Autocomplete.getStatusFromIntent(data!!)
                      showAlertMessage(status.statusMessage ?: getString(R.string.something_went_wrong))
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-12
        • 2017-09-12
        • 2015-03-19
        • 2022-01-17
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        • 2018-11-09
        相关资源
        最近更新 更多