Google 地图 API:当我尝试使用地图时,应用程序不断崩溃

Posted

技术标签:

【中文标题】Google 地图 API:当我尝试使用地图时,应用程序不断崩溃【英文标题】:Google maps API: App keeps crashing when I try to use the map 【发布时间】:2018-08-04 20:51:46 【问题描述】:

所以我目前正在尝试开发一个需要谷歌地图 API 的应用程序。每当我尝试加载地图时,我将地图实现为片段类的子类的应用程序:

package io.github.danisharsalan.meetupmarker;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


public class MapActivityFragment extends Fragment 

MapView mMapView;
private GoogleMap googleMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    View rootView = inflater.inflate(R.layout.fragment_map_activity, container, false);

    mMapView = (MapView) rootView.findViewById(R.id.mapView);
    mMapView.onCreate(savedInstanceState);

    mMapView.onResume(); //needed to make map display immediately

    try
        MapsInitializer.initialize(getActivity().getApplicationContext());
     catch (Exception e)
        e.printStackTrace();
    

    mMapView.getMapAsync(new OnMapReadyCallback() 
        @Override
        public void onMapReady(GoogleMap mMap) 
            googleMap = mMap;

            // For showing a move to my location button
            //googleMap.setMyLocationEnabled(true);

            // For dropping a marker at a point on the Map
            LatLng sydney = new LatLng(-34, 151);
            googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description"));

            // For zooming automatically to the location of the marker
            CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
            googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        
    );


    return rootView;


@Override
public void onResume()
    super.onResume();
    mMapView.onResume();


@Override
public void onPause()
    super.onPause();
    mMapView.onPause();


@Override
public void onDestroy()
    super.onDestroy();
    mMapView.onDestroy();


@Override
public void onLowMemory()
    super.onLowMemory();
    mMapView.onLowMemory();



'

这是 xml 文件,标题为 fragment_map_activity.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context="io.github.danisharsalan.meetupmarker.MapActivityFragment">

<!-- TODO: Update blank fragment layout -->

<com.google.android.gms.maps.MapView
    android:id="@+id/mapView"
    android:layout_
    android:layout_ />

</FrameLayout>

logcat 给了我这个问题:

02-25 00:29:10.924 5473-5473/io.github.danisharsalan.meetupmarker E/AndroidRuntime: 致命异常: main 进程:io.github.danisharsalan.meetupmarker,PID:5473 java.lang.RuntimeException:未找到 API 密钥。检查它是否在 AndroidManifest.xml 的元素中 在 com.google.maps.api.android.lib6.drd.q.b(:com.google.android.gms.DynamiteModulesB@11947480:40) 在 com.google.maps.api.android.lib6.auth.e.a(:com.google.android.gms.DynamiteModulesB@11947480:11) 在 com.google.android.gms.maps.internal.CreatorImpl.a(:com.google.android.gms.DynamiteModulesB@11947480:112) 在 com.google.android.gms.maps.internal.CreatorImpl.newMapViewDelegate(:com.google.android.gms.DynamiteModulesB@11947480:30) 在 com.google.android.gms.maps.internal.h.onTransact(:com.google.android.gms.DynamiteModulesB@11947480:45) 在 android.os.Binder.transact(Binder.java:499) 在 com.google.android.gms.internal.zzeu.zza(未知来源) 在 com.google.android.gms.maps.internal.zzf.zza(未知来源) 在 com.google.android.gms.maps.MapView$zzb.zza(未知来源) 在 com.google.android.gms.dynamic.zza.zza(未知来源) 在 com.google.android.gms.dynamic.zza.onCreate(未知来源) 在 com.google.android.gms.maps.MapView.onCreate(未知来源) 在 io.github.danisharsalan.meetupmarker.MapActivityFragment.onCreateView(MapActivityFragment.java:33) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:2354) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809) 在 android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799) 在 android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580) 在 android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367) 在 android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

如何解决我的 API 密钥问题?谢谢。

编辑: 事实证明,我只是错过了应该引用它的 API 密钥。很抱歉提出了一个低质量的问题

【问题讨论】:

【参考方案1】:

Google Maps API 密钥似乎未添加到 AndroidManifest 文件中。 您可以从here获取 Google Maps API 密钥

在结束标记&lt;/application &gt;之前按如下方式插入API密钥

 <meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="YOUR_API_KEY"/>

【讨论】:

以上是关于Google 地图 API:当我尝试使用地图时,应用程序不断崩溃的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Google Maps API 旋转地图时出现问题

Google map api v3 显示半张地图?

Google Maps API 地理编码 <> 静态地图?

Google Maps Api 点击地图点添加

Google Maps Android API v2 - 简单的地图应用程序崩溃

不允许使用 Google 地图 API 引荐来源网址