2013-05-08 101 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

相关问题