2015-02-23 25 views
1

我想在這裏做的例子https://developers.google.com/maps/documentation/android/start錯誤而運行谷歌地圖API V2例如

我在Eclipse中工作,也沒有在代碼中顯示的錯誤。我已經鏈接了google-play-services-lib並將項目構建目標設置爲最新版Google API。我輸入了我的API密鑰,並在控制檯的服務菜單中打開了google maps android api v2。任何想法,爲什麼我得到這個錯誤?我測試在真實設備上,是Nexus 5的運行棒棒糖(5.0.1)

我的logcat低於

FATAL EXCEPTION: main 
02-23 17:47:48.927: E/AndroidRuntime(8735): Process: com.juliette.basicgooglemap, PID: 8735 
02-23 17:47:48.927: E/AndroidRuntime(8735): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.juliette.basicgooglemap/com.juliette.basicgooglemap.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.os.Handler.dispatchMessage(Handler.java:102) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.os.Looper.loop(Looper.java:135) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at java.lang.reflect.Method.invoke(Native Method) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at java.lang.reflect.Method.invoke(Method.java:372) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
02-23 17:47:48.927: E/AndroidRuntime(8735): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:377) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Activity.setContentView(Activity.java:2144) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at com.juliette.basicgooglemap.MainActivity.onCreate(MainActivity.java:11) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Activity.performCreate(Activity.java:5933) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  ... 10 more 
02-23 17:47:48.927: E/AndroidRuntime(8735): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Fragment.instantiate(Fragment.java:618) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Fragment.instantiate(Fragment.java:582) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2108) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Activity.onCreateView(Activity.java:5282) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  ... 19 more 
02-23 17:47:48.927: E/AndroidRuntime(8735): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.maps.MapFragment" on path: DexPathList[[zip file "/data/app/com.juliette.basicgooglemap-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  at android.app.Fragment.instantiate(Fragment.java:604) 
02-23 17:47:48.927: E/AndroidRuntime(8735):  ... 23 more 
02-23 17:47:48.927: E/AndroidRuntime(8735):  Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment 
02-23 17:47:48.927: E/AndroidRuntime(8735):   at java.lang.Class.classForName(Native Method) 
02-23 17:47:48.927: E/AndroidRuntime(8735):   at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
02-23 17:47:48.927: E/AndroidRuntime(8735):   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
02-23 17:47:48.927: E/AndroidRuntime(8735):   at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
02-23 17:47:48.927: E/AndroidRuntime(8735):   ... 25 more 
02-23 17:47:48.927: E/AndroidRuntime(8735):  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

這裏的清單

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.juliette.basicgooglemap" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<!-- The following two permissions are not required to use 
Google Maps Android API v2, but are recommended. --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true"/> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="21" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="API_KEY"/> 

<uses-library android:name="com.google.android.maps" /> 
</application> 

</manifest> 

這是我的主要活動

package com.juliette.basicgooglemap; 

import android.app.Activity; 
import android.os.Bundle; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

和佈局

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:name="com.google.android.gms.maps.SupportMapFragment"/> 

任何建議,非常感謝,我很困惑。

+0

在清單中,您是否用真正的密鑰替換了'API_KEY'?確保你正確導入了庫,你的錯誤似乎是由於缺少庫。使用本指南http://developer.android.com/google/play-services/setup.html – Psypher 2015-02-23 18:31:25

+0

@Ranjith我已經在代碼中使用了真正的密鑰,我只是根據你給出的鏈接檢查了我的過程,而且我仍然有同樣的錯誤 – 2015-02-23 18:46:27

回答

2
  1. 它可能已造成的,因爲該庫不正確導入,請按照本link

  2. 的步驟。如果未解決,你正確設置了圖書館,這可能是因爲proguard的可能已經剝離了播放服務。爲了避免它添加在proguard的-project.txt以下

-keep class * extends java.util.ListResourceBundle { 
    protected Object[][] getContents(); 
} 

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 

-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 
-keepnames class * implements android.os.Parcelable { 
    public static final ** CREATOR; 
} 
  • 你的建議的Android清單修復
  • 您可能沒有添加密鑰,我看到'API_KEY'字符串而不是密鑰,它應該是這樣的(顯然密鑰會不同)

    <meta-data 
         android:name="com.google.android.maps.v2.API_KEY" 
         android:value="AZzaSyDhkhNotUseFullKey49ylKD2bw1HM" /> 
    

    您在AndroidManifest.xml缺少這些,

    <permission 
        android:name="com.juliette.basicgooglemap.permission.MAPS_RECEIVE" 
        android:protectionLevel="signature" /> 
    <uses-permission android:name="com.juliette.basicgooglemap.permission.MAPS_RECEIVE" /> 
    

    添加這太:

    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    

    下一頁設置你的佈局和代碼一樣this後,你是不是使用片段正確。

    +0

    我已經嘗試了所有三個建議,仍然是同樣的問題。我還向清單中添加了,但仍然沒有運氣。還有其他建議嗎? – 2015-02-23 19:27:06

    +0

    @JoolzZenda剛剛更新了這篇文章,嘗試添加新的權限並設置了後面提到的佈局,java代碼 – Psypher 2015-02-23 19:41:37

    +0

    它現在正在工作,它就像您所建議的那樣是片段活動。非常感謝你的幫助 :) – 2015-02-23 20:08:02