我正在尝试第一次实现地方自动完成片段并面临一个问题。当我开始输入时,在第一个字母后它开始搜索而不是显示结果它(片段)刚刚消失.. 我得知的是 状态{statusCode = PLACES_API_ACCESS_NOT_CONFIGURED,resolution = null}
的Manifest.xml
cellForRowAt
Xml_layout
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "CustomCell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath as IndexPath) as! CustomCell
if(selectedIndexPath != nil) {
if(indexPath == selectedIndexPath) {
cell.button.isHidden = false
}
}
return cell
}
类
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4" />
答案 0 :(得分:23)
在Android上使用Google API进行开发时,这是一次非常有趣的体验。您需要做的就是:
就是这样。
答案 1 :(得分:4)
rand_mem_RAM是对的。
花了我2天的谷歌搜索,可能绕过了答案因为它太简单了。
本来可以投票但不能作为嘉宾这样做。
答案 2 :(得分:2)
我也遇到了同样的问题,然后我偶然发现了此消息,如果您想自己检查,这里是链接。 Places SDK for Android。
长话短说,我迁移到了新的APIS,其说明在此处。 Migrating to the new Places SDK Client
在我的情况下我的地图在Fragment上,搜索在地图顶部
build.gradle
implementation "com.google.android.gms:play-services-location:16.0.0"
implementation "com.google.android.gms:play-services-maps:16.1.0"
implementation 'com.google.android.libraries.places:places:1.0.0'
请注意场所API是最新的1.0.0。
这些API给了我:
用于MAP的
com.google.android.gms.maps.SupportMapFragment
用于SEARCH的
com.google.android.libraries.places.widget.AutocompleteSupportFragment 酒吧
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="16dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<fragment
android:id="@+id/f_auto_complete"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:minHeight="@dimen/size_search_view"
app:layout_constraintEnd_toEndOf="@+id/map"
app:layout_constraintStart_toStartOf="@id/map"
app:layout_constraintTop_toTopOf="@id/map" />
片段
private fun initAutoCompleteView() {
activity?.let { a ->
if (!Places.isInitialized()) {
Places.initialize(a.applicationContext, "YOUR API KEY")
}
fragment = childFragmentManager.findFragmentById(R.id.f_auto_complete) as AutocompleteSupportFragment
fragment?.let {
it.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG))
it.setOnPlaceSelectedListener(object : PlaceSelectionListener {
override fun onPlaceSelected(place: Place) {
Log.i("Places", place.name)
}
}
override fun onError(status: Status) {
Log.i("Places", "An error occurred: $status")
}
})
}
}
}
为了使生活更轻松,我还添加了导入,以防万一所有类都不适合。
import com.google.android.libraries.places.api.Places
import com.google.android.libraries.places.api.model.Place
import com.google.android.libraries.places.widget.AutocompleteSupportFragment
import com.google.android.libraries.places.widget.listener.PlaceSelectionListener
答案 3 :(得分:1)
另一个可能的原因是因为您尚未为项目启用计费。我就是这种情况。我尝试了此页面中的所有解决方案,但是在键入字符后,place-autocomplete-fragment仍然自行关闭。
因此,我从字面上回到基础知识,然后转到Places SDK for Android Getting Started page,它在该页面上提到在使用Android版Places SDK之前我们需要启用计费功能。那为我解决了问题。
要启用计费,请转到the billing page。
答案 4 :(得分:0)
由于SHA1指纹可能会出现问题,在我的情况下,在更换调试sha1键后释放sha1 app工作正常
答案 5 :(得分:0)
我认为您应该禁用对api密钥的限制。这可能不是最安全的方法,但对我有用。
答案 6 :(得分:0)
如果您已根据限制添加了api,请在允许的API中添加place api