AutocompleteFragment 结果返回具有空属性的位置
Posted
技术标签:
【中文标题】AutocompleteFragment 结果返回具有空属性的位置【英文标题】:AutocompleteFragment results return a place with null attributes 【发布时间】:2019-07-09 11:59:31 【问题描述】:我正在尝试使用导航抽屉和地图片段制作应用程序。我试图有一个自动完成片段,但是当我搜索一个地方时,我只收到 name 和 id 属性。 像这样:
I/PLACE: Placeaddress=null, attributions=[], id=ChIJVXealLU_xkcRja_At0z9AGY, latLng=null, name=Amsterdam, openingHours=null, phoneNumber=null, photoMetadatas=null, plusCode=null, priceLevel=null, rating=null, types=null, userRatingsTotal=null, viewport=null, websiteUri=null
这是我的 MapsFragment
public class MapsFragment extends Fragment implements OnMapReadyCallback, LocationListener
MapView mapView;
GoogleMap nMap;
AutocompleteSupportFragment autocompleteFragment;
PlacesClient placesClient;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
final View rootView = inflater.inflate(R.layout.activity_maps, container, false);
...
mapView = (MapView) rootView.findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
autocompleteFragment.onActivityResult(requestCode, resultCode, data);
...
@Override
public void onMapReady(GoogleMap googleMap)
Log.i("DEBUG", "onMapReady");
nMap = googleMap;
Context mContext = getActivity();
if (mContext != null)
Places.initialize(mContext, "*********MY API KEY*********");
else
Log.i("PLACE", "ERROR");
placesClient = Places.createClient(getActivity());
autocompleteFragment = (AutocompleteSupportFragment)
getChildFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener()
@Override
public void onPlaceSelected(@NonNull Place place)
Log.i("PLACE", place.toString());
// Define a Place ID.
//nMap.moveCamera(CameraUpdateFactory.newLatLng(place.getLatLng()));
//nMap.animateCamera(CameraUpdateFactory.newLatLngZoom(place.getLatLng(), 12.0f));
@Override
public void onError(@NonNull Status status)
Log.i("PLACE", status.toString());
);
autocompleteFragment.setUserVisibleHint(true);
autocompleteFragment.setHint("Select your city");
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED)
nMap.setMyLocationEnabled(true);
else
// Show rationale and request permission.
Log.d(TAG, "error permission denied");
这是我的 map.xml
...
<fragment
android:id="@+id/place_autocomplete_fragment"
android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
android:layout_
android:layout_ />
<FrameLayout
android:layout_
android:layout_>
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_
android:layout_ />
</FrameLayout>
...
我将我的 API KEY 放入代码(查看地图片段)、googles_maps_api.xml 以及 gradle.properties
PLACES_API_KEY="MY API KEY"
这是我对谷歌地图的依赖项
dependencies
...
implementation 'com.google.android.libraries.places:places:1.0.0'
我关注每个steps 来激活我的 API KEY
我也尝试使用 android 限制来保护我的 KEY,但没有任何改变
我的计费系统已启用。
【问题讨论】:
【参考方案1】:你不允许在 setPlaceFields 中你想要什么。例如,我想要 latlang,所以我添加了 LAT_LNG。见下文。
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME,Place.Field.LAT_LNG));
【讨论】:
【参考方案2】:如果您想使用 addressComponents 对象,您必须将 Place.Field.ADDRESS_COMPONENTS 添加到字段列表中。否则此对象将为空。
【讨论】:
【参考方案3】:使用相同的:
List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME,Place.Field.ADDRESS,Place.Field.LAT_LNG);
但仍然给定 lat n lng 的空值,得到 i。
【讨论】:
以上是关于AutocompleteFragment 结果返回具有空属性的位置的主要内容,如果未能解决你的问题,请参考以下文章