android - java.lang.IllegalStateException:必须初始化地方
问题描述
我使用的是旧的 Place SDK,它工作正常,但它会被贬值,我会转移到新的 Place SDK。我得到了一些设备的崩溃报告。
崩溃报告:
Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{com.islamuna.ramadan/com.google.android.libraries.places.widget.AutocompleteActivity}: java.lang.IllegalStateException: Places must be initialized.
开发工具包版本:
implementation 'com.google.android.libraries.places:places:1.1.0'
即使我初始化地方示例代码:
Places.initialize(getApplicationContext(), "mykey", Locale.US);
autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME,Place.Field.LAT_LNG));
autocompleteFragment.setText(Global.getStoredStringValue(getApplicationContext(), getString(R.string.KEY_CITY)));
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
try {
}
} catch (Exception e) {
}
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
}
});
布局 XML
<fragment
android:id="@+id/place_autocomplete_fragment"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border_filled" />
解决方案
我也面临同样的问题,但我用这段代码解决了。
dependencies {
implementation 'com.google.android.libraries.places:places:2.0.0'
}
第一步:在 OnCreate 方法中初始化 Places SDK,或者您可以在您的应用程序类中初始化它
if (!Places.isInitialized()) {
Places.initialize(getApplicationContext(), getString(R.string.api_key), Locale.US);
}
第二步:
var fields=Arrays.asList(Place.Field.ID,Place.Field.NAME,Place.Field.LAT_LNG)
var intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields).build(this)
startActivityForResult(intent, PLACE_PICKER_REQUEST)
在活动结果中
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
val place =Autocomplete.getPlaceFromIntent(data);
lat = place.latLng?.latitude
lng = place.latLng?.longitude
}
else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
// TODO: Handle the error.
var status = Autocomplete.getStatusFromIntent(data)
Log.i("address", status.getStatusMessage());
}
}
}
这是 Kotlin 示例,但您可以在 JAVA 中转换此外,您可以参考此 URL 获取示例。 Google Places SDK 示例
推荐阅读
- javascript - Javascript Array.push() 的奇怪行为
- ios - 链接器命令失败,退出代码为 1(使用 -v 查看调用)
- c++ - 在堆上存储 unique_ptr 的最简单方法是什么?
- javascript - Javascript 创建 iframe,但 iframe 无法获取 http_referer
- listview - 来自 ViewModel 的绑定控件详细信息对于 xamarin.forms 中的 ListView 需要很长时间
- ruby-on-rails - Rails 请求资产失败,但资产在位置
- html - 应用 CSS Grid 时 Owl Carousel 2 不工作
- image-processing - 我在哪里可以使用 python 项目进行图像处理。最好有代码,因为我是新手,我正在尝试图像处理
- vba - 在 MS Project 中使用替换 VBA 功能
- javascript - 使用 jodit 编辑器在 textarea 中写入或删除字符串