Google maps 自动完成支持片段不工作;无法加载搜索结果';安卓
使用Google maps 自动完成支持片段不工作;无法加载搜索结果';安卓,google-maps,android-studio,google-places-api,Google Maps,Android Studio,Google Places Api,使用AutocompleteSupportFragment查找位置时遇到问题,因为它没有向我显示任何结果,并且我得到了一个错误。 我已经把新的代码,因为他们要求我的谷歌控制台键,但它仍然不工作。 这是我的密码 我没有密码限制,我不知道这是否是问题所在 已启用Places API 多谢各位 MainActivity.java public class MainActivity extends AppCompatActivity { PlacesClient placesClient; List
AutocompleteSupportFragment
查找位置时遇到问题,因为它没有向我显示任何结果,并且我得到了一个错误。
我已经把新的代码,因为他们要求我的谷歌控制台键,但它仍然不工作。
这是我的密码
我没有密码限制,我不知道这是否是问题所在
已启用Places API
多谢各位
MainActivity.java
public class MainActivity extends AppCompatActivity {
PlacesClient placesClient;
List<Place.Field> placesFields= Arrays.asList(Place.Field.ID,Place.Field.NAME,Place.Field.ADDRESS);
AutocompleteSupportFragment places_fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPlaces();
setUpPlacesAutocomplete();
}
private void initPlaces() {
Places.initialize(this,getString(R.string.places_api_key));
placesClient=Places.createClient(this);
}
private void setUpPlacesAutocomplete() {
places_fragment =(AutocompleteSupportFragment)getSupportFragmentManager()
.findFragmentById(R.id.places_autocompletar);
places_fragment.setPlaceFields(placesFields);
places_fragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(@NonNull Place place) {
Toast.makeText(MainActivity.this, ""+place.getName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(@NonNull Status status) {
Toast.makeText(MainActivity.this, ""+status.getStatusMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
public类MainActivity扩展了AppCompatActivity{
地点客户地点客户;
List placesFields=Arrays.asList(Place.Field.ID,Place.Field.NAME,Place.Field.ADDRESS);
自动完成支持片段放置\u片段;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPlaces();
setupplacesautomplete();
}
私人空间{
初始化(这个,getString(R.string.Places\u api\u key));
placesClient=Places.createClient(此);
}
私有无效设置位置自动完成(){
places_fragment=(AutocompleteSupportFragment)getSupportFragmentManager()
.findFragmentById(R.id.places\u autocompletar);
places\u fragment.setPlaceFields(placesFields);
places\u fragment.setOnPlaceSelectedListener(新的PlaceSelectionListener(){
@凌驾
已选择公共空位置(@NonNull Place){
Toast.makeText(MainActivity.this,“+place.getName(),Toast.LENGTH_SHORT.show();
}
@凌驾
public void onError(@NonNull状态){
Toast.makeText(MainActivity.this,“+status.getStatusMessage(),Toast.LENGTH_SHORT.show();
}
});
}
}
活动\u main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:id="@+id/places_autocompletar"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</fragment>
</LinearLayout>
在“无”选项的“应用程序限制”中,我有一个密钥部分,请使用下面的代码进行尝试
Please try with below code
private static final int AUTOCOMPLETE_REQUEST_CODE = 101;
/*-- initializing Places API --**/
if (!Places.isInitialized()) {
Places.initialize(getActivity(), getActivity().getResources().getString(R.string.google_map_key));
}
/*-- 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);
}
}
/*-- Result of Auto complete google address search --**/
@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);
cityEd.setText(address.getLocality());
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.
}
}
}
私有静态最终整数自动完成请求代码=101;
/*--初始化PlacesAPI--**/
如果(!Places.isInitialized()){
初始化(getActivity(),getActivity().getResources().getString(R.string.google_map_key));
}
/*--打开地址搜索活动的函数--**/
public void createAutoCompleteContent(){
如果(getActivity()!=null){
列表字段=数组.asList(Place.Field.ID,Place.Field.NAME,Place.Field.LAT_LNG,Place.Field.ADDRESS);
Intent=new Autocomplete.IntentBuilder(
自动完成活动模式(全屏,字段)
.build(getActivity());
startActivityForResult(意图、自动完成请求代码);
}
}
/*--自动完成谷歌地址搜索的结果--**/
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
if(请求代码==自动完成请求代码){
if(resultCode==RESULT\u OK){
地点=自动完成。getPlaceFromIntent(数据);
if(place.getLatLng()!=null){
//反向地理编码以获取街道地址、城市、州和邮政编码
Geocoder Geocoder=新的地理编码器(getActivity(),Locale.getDefault());
试一试{
System.out.println(“----地址列表----”+place.getAddress()+“”+place.getName());
List addressList=geocoder.getFromLocation(
place.getLatLng().纬度,place.getLatLng().经度,1);
System.out.println(“----地址列表------”+地址列表);
if(addressList!=null&&addressList.size()>0){
地址=地址列表。获取(0);
System.out.println(“----地址------”+地址);
address.setText(address.getAddressLine(0));
字符串featureName=“”;
if(address.getFeatureName()!=null){
featureName=地址。getFeatureName();
}
字符串throughFare=“”;
if(address.getthorougheare()!=null){
throughFare=address.getthorougheare();
}
字符串streetAddress=featureName+“”+throughFare;
streetAddressEd.setText(streetAddress);
setText(address.getLocality());
stated.setText(address.getAdminArea());
postcoded.setText(address.getPostalCode());
countried.setText(address.getCountryName());
}
}捕获(IOE异常){
Log.e(标签“无法连接到地理编码器”,e);
}
}
}else if(resultCode==自动完成活动。结果\u错误){
状态状态=自动完成。getStatusFromIntent(数据);
如果(getActivity()!=null){
Util.showMessageBar(getActivity(),status.getStatusMessage());
}
}else if(resultCode==RESULT\u取消){
//用户取消了操作。
}
}
}
我尝试了这个,但仍然遇到同样的问题“无法加载搜索结果”。我已经将帐单帐户添加到我的项目中。您是否已将其添加到清单文件中?你是如何解决你的问题的?