ナビゲーションドロワーと地図のフラグメントを使用してアプリケーションを作成しようとしています。オートコンプリートフラグメントを作成しようとしていますが、場所を検索すると、nameとid属性。このような:
I/PLACE: Place{address=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_width="match_parent"
Android:layout_height="56dp" />
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<com.google.Android.gms.maps.MapView
Android:id="@+id/mapView"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</FrameLayout>
...
APIキーをコード(ルックマップフラグメント)、googles_maps_api.xml、およびgradleに配置しました。プロパティ
PLACES_API_KEY="MY API KEY"
これがグーグルマップの私の依存関係です
dependencies {
...
implementation 'com.google.Android.libraries.places:places:1.0.0'
}
私はすべての ステップ に従い、APIキーをアクティブ化します
また、Android制限でキーを保護しようとしましたが、何も変更されませんでした
私の課金システムは有効です。
同じを使用:
List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME,Place.Field.ADDRESS,Place.Field.LAT_LNG);
しかし、lat n lngの残りのnull値が指定された場合、残りの値はiを取得します。