2013-05-08 60 views
0

我正在使用android API v2的Map視圖,我正在關注this tutorial,我遵循他在教程中解釋的內容,但仍然收到致命異常。這裏是我的日誌貓的XML代碼。致命異常:main java.lang.RuntimeException:無法啓動活動ComponentInfo

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment" /> 

</RelativeLayout> 

的logcat:

05-08 10:38:22.121: E/AndroidRuntime(954): FATAL EXCEPTION: main 
05-08 10:38:22.121: E/AndroidRuntime(954): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.map/com.example.map.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.os.Looper.loop(Looper.java:137) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-08 10:38:22.121: E/AndroidRuntime(954): at java.lang.reflect.Method.invokeNative(Native Method) 
05-08 10:38:22.121: E/AndroidRuntime(954): at java.lang.reflect.Method.invoke(Method.java:511) 
05-08 10:38:22.121: E/AndroidRuntime(954): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-08 10:38:22.121: E/AndroidRuntime(954): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-08 10:38:22.121: E/AndroidRuntime(954): at dalvik.system.NativeStart.main(Native Method) 
05-08 10:38:22.121: E/AndroidRuntime(954): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
05-08 10:38:22.121: E/AndroidRuntime(954): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Activity.setContentView(Activity.java:1881) 
05-08 10:38:22.121: E/AndroidRuntime(954): at com.example.map.MainActivity.onCreate(MainActivity.java:12) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Activity.performCreate(Activity.java:5104) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-08 10:38:22.121: E/AndroidRuntime(954): ... 11 more 
05-08 10:38:22.121: E/AndroidRuntime(954): 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 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Fragment.instantiate(Fragment.java:592) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Fragment.instantiate(Fragment.java:560) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Activity.onCreateView(Activity.java:4709) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
05-08 10:38:22.121: E/AndroidRuntime(954): ... 21 more 
05-08 10:38:22.121: E/AndroidRuntime(954): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.maps.MapFragment" on path: /data/app/com.example.map-2.apk 
05-08 10:38:22.121: E/AndroidRuntime(954): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65) 
05-08 10:38:22.121: E/AndroidRuntime(954): at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
05-08 10:38:22.121: E/AndroidRuntime(954): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
05-08 10:38:22.121: E/AndroidRuntime(954): at android.app.Fragment.instantiate(Fragment.java:582) 
05-08 10:38:22.121: E/AndroidRuntime(954): ... 24 more 

我的清單是看起來像這樣。

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

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

    <permission 
     android:name="com.example.map.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 
    <uses-permission android:name="com.example.map.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.map.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.maps.v2.API_KEY" 
      android:value="AIzaSyDSW0CfwDN0LyrF8PBeihEjrAkj25TDhUQ" /> 
    </application> 

</manifest> 

回答

1

您正嘗試將現有項目導入到庫中。您應該使用以下方法導入庫。

  1. 右鍵單擊包資源管理器。導入 - >展開Android - >現有的 Android代碼進入工作區。
  2. 選擇google-play-services庫。並檢查複製到 工作區複選框。

一旦完成,參考圖書館項目

右鍵點擊該項目。在左側窗格中選擇Android。在右側窗格底部,您會看到一個帶有標籤庫的框架。點擊添加並添加導入的庫。

將支持庫添加到您的項目中: 右鍵單擊項目Androids工具 - >添加支持庫。

如果你決定使用支持庫你將有

<fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.SupportMapFragment" /> 

也更換代碼

<fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment" /> 

在你的java文件,你將不得不使用SupportMapFragment。

mMap = ((SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map)).getMap(); 
+0

是的你的,是正確的,但我仍然得到這個05-08 15:09:47.814:W/GooglePlayServicesUtil(1790):Google Play服務已過期。需要3027100,但找到2012110 – 2013-05-08 15:10:51

+0

你是否試圖在模擬器上運行應用程序? – 2013-05-08 16:03:28

+0

@yeah,現在像魅力一樣運行......我剛剛將Google Play服務版本6替換爲版本4。 – 2013-05-10 12:05:23

0

您是否在Eclipse中使用了正確的API(GOOGLE API)?如果您想在Android中使用Google地圖,請務必使用GOOGLE API!

+0

@ user1396042要做到這一點,右鍵單擊項目 - >屬性 - > Android的 – Bigflow 2013-05-08 10:52:36

+0

@Bigflow ..我已經試過你太..而且我使用正確的API – 2013-05-08 11:29:50

1

確保您在項目構建目標中使用Google API。轉到項目屬性> Android來檢查這一點。

+0

在我的項目屬性> Android的他們是沒有圖書館,但我安裝了谷歌播放服務。 – 2013-05-08 11:37:56

+1

您應該安裝Google API。按照此鏈接的步驟1和2。 http://shashikawlp.wordpress.com/2012/09/19/google-maps-tutorial-for-android/ – Shashika 2013-05-08 15:46:57

0

您可能有導入問題。只需要點擊project -> properties -> Java build path右鍵點擊你已經導入的庫。爲清晰起見,請參閱this link

0

此錯誤通常源自google-play-services庫的錯誤引用。

要做到這一點正確,請按照第3步這個博客帖子導遊,我在你的應用程序進行集成谷歌地圖API V2寫道:

Google Maps API V2

+0

我已經看到了我的google-play-services通過導入,就像您的鏈接中解釋的第二步。但他們不是地圖項目。 – 2013-05-08 11:34:45

+0

你是什麼意思:但他們沒有地圖項目? – 2013-05-08 11:35:35

+0

當我試圖在這裏導入lib,sdk \ extras \ google \ google_play_services \ libproject \ google-play-services_lib時,我收到消息沒有找到項目導入。 – 2013-05-08 11:41:42

0
""Caused by: java.lang.ClassNotFoundException: Didn't find class"com.google.android.gms.maps.MapFragment" on path: /data/app/com.example.map-2.apk"" 

你檢查過嗎?

我想你應該在你的AndroidManifest.XML中添加這個(com.google.android.gms.maps.MapFragment)ACTIVITY。

試試LogCat中的三個「由......引起的」錯誤。

+0

我試過所有這些東西,但得到的結果相同的例外發生.. – 2013-05-08 11:28:50

+0

那麼你應該認真研究這個! 「android.view.InflateException:二進制XML文件行#11:錯誤膨脹類片段」 – sai 2013-05-08 11:40:03

+0

另請嘗試:1.)添加 - > 2 )將您的活動從「MapActivity」擴展而不是「活動」。 – sai 2013-05-08 11:40:57

相關問題