Google的新PlaceAutocompleteFragment不会返回任何结果

问题描述 投票:0回答:2

我在Android Studio上安装了所有最新的API和SDK。我有一个Google maps API密钥。我的应用程序在我的Note 4中以调试模式完美启动。它看起来应该是应该的样子 - 在地图顶部带有PlaceAutocompleteFragment搜索框的Google地图。但是,当我选择PlaceAutocompleteFragment搜索框并在其中只键入一个字符时,它会启动快速搜索等待圈然后消失,从不返回任何结果。该应用程序不会崩溃,它只是回到它开始的方式。我可以一遍又一遍地执行此操作而不会崩溃或PlaceAutocompleteFragment返回任何结果。

java类:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
/**
 * ATTENTION: This was auto-generated to implement the App Indexing API.
 * See https://g.co/AppIndexing/AndroidStudio for more information.
 */
private GoogleApiClient client;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();

    PlaceAutocompleteFragment fragment = (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);

    fragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            // Handle the selected Place
            Context context = getApplicationContext();
            CharSequence text = place.getName();
            int duration = Toast.LENGTH_LONG;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }

        @Override
        public void onError(Status status) {
            // Handle the error
        }
    });


}




/**
 * Manipulates the map once available.
 * This callback is triggered when the map is ready to be used.
 * This is where we can add markers or lines, add listeners or move the camera. In this case,
 * we just add a marker near Sydney, Australia.
 * If Google Play services is not installed on the device, the user will be prompted to install
 * it inside the SupportMapFragment. This method will only be triggered once the user has
 * installed Google Play services and returned to the app.
 */
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    if(ContextCompat.checkSelfPermission(this,permission.ACCESS_FINE_LOCATION)
            ==PackageManager.PERMISSION_GRANTED)
    {
        mMap.setMyLocationEnabled(true);
        //mMap.moveCamera(CameraUpdateFactory.);
    }
    else
    {
        // Show rationale and request permission.
        // Add a marker in Miami and move the camera
        LatLng miami = new LatLng(26, -80);
        mMap.addMarker(new MarkerOptions().position(miami).title("Marker in Miami"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(miami));
    }
}


@Override
public void onStart() {
    super.onStart();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client.connect();
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW, // TODO: choose an action type.
            "Maps Page", // TODO: Define a title for the content shown.
            // TODO: If you have web page content that matches this app activity's content,
            // make sure this auto-generated web page URL is correct.
            // Otherwise, set the URL to null.
            Uri.parse("http://host/path"),
            // TODO: Make sure this auto-generated app deep link URI is correct.
            Uri.parse("android-app://com.greenfeetsurvival.greenfeetaviator/http/host/path")
    );
    AppIndex.AppIndexApi.start(client, viewAction);




}

@Override
public void onStop() {
    super.onStop();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW, // TODO: choose an action type.
            "Maps Page", // TODO: Define a title for the content shown.
            // TODO: If you have web page content that matches this app activity's content,
            // make sure this auto-generated web page URL is correct.
            // Otherwise, set the URL to null.
            Uri.parse("http://host/path"),
            // TODO: Make sure this auto-generated app deep link URI is correct.
            Uri.parse("android-app://com.greenfeetsurvival.greenfeetaviator/http/host/path")
    );
    AppIndex.AppIndexApi.end(client, viewAction);
    client.disconnect();
}
}

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
map:uiZoomControls="true"
map:uiZoomGestures="true"
map:mapType="normal"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MapsActivity">
<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.greenfeetsurvival.greenfeetaviator.MapsActivity">
    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_gravity="top"
        android:layout_margin="5dp"
        android:layout_width="200dp"
        android:layout_height="40dp"
        card_view:cardCornerRadius="4dp">
        <fragment
            android:id="@+id/place_autocomplete_fragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" />
    </android.support.v7.widget.CardView>
</fragment>
</LinearLayout>

清单使用gps位置和互联网:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

请帮忙。

android google-maps android-studio
2个回答
1
投票

我也面临同样的问题。将setOnPlaceSelectedListener添加到PlaceAutocompleteFragment后,我发现原因是PLACES_API_ACCESS_NOT_CONFIGURED


0
投票

对于有此问题的其他人,可能有很多原因:

  1. 启用Google Places API。
  2. 如果您正在使用其他Google API,则应为每个使用不同的密钥。
  3. 如果您使用的是谷歌地图和谷歌,那么您只需在Android清单中定义一个元数据标签: <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key" />
© www.soinside.com 2019 - 2024. All rights reserved.