【问题标题】:Google Maps API Android - Error inflating class fragmentGoogle Maps API Android - 膨胀类片段时出错
【发布时间】:2013-05-01 16:42:39
【问题描述】:

我知道 StackOverFlow 上有很多关于这个问题的主题,但是没有一个可以帮助我。 我正在做一个非常基本的应用程序,我只想显示一个 MAP。

  • 我已将 google-play-services_lib 导入到我的主项目中。
  • 我已经生成了我的 API 密钥。

这是我的 AndroidManifest.xml 文件:

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

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

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

    <uses-permission android:name="com.linkme2night.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <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" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.linkme2night.view.interactwithvenue.InteractWithVenueActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.linkme2night.view.openvenuesmap.OpenVenuesMapActivity"
            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="AIzaSyBJVHZJr1Q14fcvEHBkAUT1A_ZH4eQlnrI" />
    </application>

</manifest>

这是我的布局 XML 文件:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:id="@+id/the_map"
    android:name="com.google.android.gms.maps.SupportMapFragment "
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

这是我的代码:

public class OpenVenuesMapActivity extends FragmentActivity  {

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

我在我的 Sony XPeria J 上运行该应用程序。我收到以下由 Loc Cat 生成的错误:

05-01 18:51:48.544: E/AndroidRuntime(10794): FATAL EXCEPTION: main
05-01 18:51:48.544: E/AndroidRuntime(10794): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.linkme2night/com.linkme2night.view.openvenuesmap.OpenVenuesMapActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2065)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2090)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.ActivityThread.access$600(ActivityThread.java:136)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.os.Looper.loop(Looper.java:137)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.ActivityThread.main(ActivityThread.java:4802)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at java.lang.reflect.Method.invokeNative(Native Method)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at java.lang.reflect.Method.invoke(Method.java:511)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:813)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:580)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at dalvik.system.NativeStart.main(Native Method)
05-01 18:51:48.544: E/AndroidRuntime(10794): Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.Activity.setContentView(Activity.java:1869)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at com.linkme2night.view.openvenuesmap.OpenVenuesMapActivity.onCreate(OpenVenuesMapActivity.java:14)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.Activity.performCreate(Activity.java:5013)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2029)
05-01 18:51:48.544: E/AndroidRuntime(10794):    ... 11 more
05-01 18:51:48.544: E/AndroidRuntime(10794): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment : make sure class name exists, is public, and has an empty constructor that is public
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.support.v4.app.Fragment.instantiate(Fragment.java:401)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
05-01 18:51:48.544: E/AndroidRuntime(10794):    ... 20 more
05-01 18:51:48.544: E/AndroidRuntime(10794): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.SupportMapFragment 
05-01 18:51:48.544: E/AndroidRuntime(10794):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
05-01 18:51:48.544: E/AndroidRuntime(10794):    at android.support.v4.app.Fragment.instantiate(Fragment.java:391)
05-01 18:51:48.544: E/AndroidRuntime(10794):    ... 23 more

这是我从位于我的 C:/Program Files/eclipse/SDKs/... 中的现有代码创建 google-service-lib 然后将其导入我的项目时得到的:

有谁知道我还能错过什么?我开始对这个简单的事情感到绝望......

【问题讨论】:

  • 您是否从 android-sdk 文件夹中导入了 google-play-services_lib 项目?另外,我认为您需要使用 Google API,而不是 Android 4.2.2...
  • @Kaleb 我一直在关注的教程都提到使用 Android 而不是 Google API 作为项目构建目标
  • 您是对的,如果您使用的是 servcies_lib,您显然使用的是 Maps V2,而不是 V1。

标签: java android eclipse google-maps


【解决方案1】:

您的最小 sdk 为 11。您需要为 12 以下的 api 版本添加支持库

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

在 HoneyComb 中引入了片段。所以为了向后兼容,你需要添加支持库

 android:name="com.google.android.gms.maps.SupportMapFragment "

因为你没有添加支持库,所以你得到了 classcastexception

要添加支持库,请查看下面的链接

http://developer.android.com/tools/extras/support-library.html

【讨论】:

    【解决方案2】:

    我已将 google-play-services_lib 导入到我的主项目中。

    不是根据您的堆栈跟踪。您的堆栈跟踪表明您手动修改了构建路径以包含来自 Play Services SDK 的 JAR,而不是将 Play Services SDK 作为 Android 库项目附加。

    【讨论】:

    • 我用新信息编辑了我的问题,并发布了一个新的 logcat。你能看看吗?非常感谢
    • @filipehd 将库项目复制到您的工作区。点击 File > Import,选择 Android > Existing Android Code into Workspace,浏览工作区以导入库项目。现在您可以在您的 android 项目中引用相同的内容
    • @filipehd:红色 X 表示您对库项目的引用由于某种原因被破坏,例如指定位置不再存在。
    • @filipehd 尝试将库项目复制到其他驱动器。
    • android:minSdkVersion="11" 你的 min sdk 11 意味着你希望在运行 api 11 到 17 的设备上支持你的应用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2023-03-27
    相关资源
    最近更新 更多