36

我正在尝试我的手和 Android 应用程序开发。我目前正在使用 Eclipse(我不记得版本,无论是最新版本)。我已经过了一座桥,我似乎无法理解我做错了什么。我正在尝试使用 Google Maps V2 API。我浏览了几个文档并尝试了几种技术,所有这些都导致了同样的错误:

Android.view.Inflate Exception: Binary XML file line #2: Error inflating class fragment

我已经连续两天把脸撞到钥匙上了,试图抓住我在这里做错了什么。

我做过的事情:

  1. 从一个空白活动开始。
  2. 项目 -> 属性 -> Android ->项目构建目标是 Google API - 4.2 - API 17 - 我也尝试了所有其他选项(只要高于 3.0 版,发现它已记录在案
  3. 将 google-play-services_lib 添加到我的包资源管理器中。我指出 google-play-services_lib 确实是a library.
  4. 项目 -> 属性 -> Android -> 库 -> 添加 -> 我选择了 google-play-services_lib 的位置。
  5. 作为android-support-v4.jar我项目的依赖项。

我已经尝试了很多与我类似的问题的不同答案,但无济于事。:( 我通常可以弄清楚这些事情,但也许我太超载了。

我在 Eclipse 中的包资源管理器树看起来像

  1. 谷歌播放服务库
  2. 向量机

这是代码:>

activity_main.xml

<?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"
    class="com.google.android.gms.maps.SupportMapFragment"/>

显现

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

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

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

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.testing.svma.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="SHA1_Generated_KEY_HERE" />
    </application>

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

MainActivity.java

package com.testing.svma;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }
}

参考文件

  1. 我使用谷歌地图的“错误膨胀类片段”来尝试解决我的问题。

  2. 我参考了这个谷歌地图快速入门指南来创建我的项目。

  3. 我最初是从 Google Maps Android V2 Api 简介中的示例代码开始的

  4. 一大堆SO问题。

那么,SO社区,我做错了什么?为什么我无法掌握这个简单的概念。

先感谢您。

4

16 回答 16

32

我知道这可能是一个死线程,但以防万一有人偶然发现这里有相同的问题 - 您的清单可能缺少以下元信息:

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

<application>元素中声明它,您的代码应该可以工作。在跳过此步骤的 youtube 教程之后,我遇到了同样的问题,只有在仔细阅读原始 Google 教程时,我才注意到缺少代码。

无论如何,希望这对某人有所帮助。

于 2014-02-09T13:33:12.700 回答
23

我有同样的代码/同样的问题!尝试将 android:name="com.testing.svma.MainActivity" 添加到布局中的“片段”!它为我解决了这个问题

<?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"
    class="com.google.android.gms.maps.SupportMapFragment"
    android:name="com.testing.svma.MainActivity"/>
于 2013-02-21T15:06:50.377 回答
6

我有同样的问题,通过修改清单解决了。这是我的清单。

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

        <permission 
               android:name="example.gps.permission.MAPS_RECEIVE" 
               android:protectionLevel="signature"></permission>
      <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
         <uses-sdk
           android:minSdkVersion="9"
           android:targetSdkVersion="17"/>
         <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"/>
      <!-- External storage for caching. -->
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <!-- My Location -->
         <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
         <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
      <!-- Maps API needs OpenGL ES 2.0. -->
         <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true"/>
      <!-- End of copy. -->

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme"
            android:hardwareAccelerated="true" >
            <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="<YOUR VALUE>"/>
            <meta-data
                android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />
            <activity
                android:name="example.gps.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>
        </application>

    </manifest>

xml文件是

 <?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"
        class="com.google.android.gms.maps.SupportMapFragment"
    />

java类是

   public class MainActivity extends FragmentActivity
        {
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
           }
        }

这解决了我的问题

于 2013-11-12T17:40:43.093 回答
3

尝试将 google-play-services 库引用添加到您的项目中。Project->Properties->Android如果您使用的是 Eclipse ,则需要转到Addgoogle-play-services 库项目。

或者,

project.properties您可以手动修改文件。尝试添加对您的 google_play_services 库的引用。所以我的project.properties文件看起来像:

# Project target.
target=android-17
android.library.reference.1=../../../android-sdks/extras/google/google_play_services/libproject/google-play-services_lib

在您的情况下,google-play-services lib 的路径可能会有所不同

我试图导入你的代码,它也崩溃了。当我修改属性文件时 - 我正在运行地图

于 2013-02-06T23:05:39.963 回答
2

我花了很多时间试图解决这个问题,经过大量阅读和尝试,我通过改变

public class MainActivity extends FragmentActivity

为了这

public class MainActivity extends android.support.v4.app.FragmentActivity

我希望这可以帮助你

于 2013-06-24T01:43:04.683 回答
2

在几天内尝试了上述所有答案,然后最终奏效了:

项目 -> 属性 -> Android -> 项目构建目标

将项目构建目标更改为 android 4.3(API 18) 并单击应用

然后在清单中我手动更改了最小和目标 sdk 版本:

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

这现在与target=android-18project.properties 文件中的匹配(这是我们首先所做的项目构建目标更改的结果)

我也尝试过android:minSdkVersion="11"哪个有效,所以这targetSdkVersion是重要的一点。

希望这对某人有帮助!

于 2014-03-04T23:08:25.453 回答
2

问题经常出在Manifest.xml,所以请确保您编写了正确的权限,例如:`

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

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

    <permission
        android:name="com.zako.android.locationapi.maps.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <!-- Required OpenGL ES 2.0. for Maps V2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <!-- Requires OpenGL ES version 2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.zako.android.locationapi.maps.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.zako.android.locationapi.maps.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="......" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>

`

不要忘记<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

于 2014-06-03T14:52:17.533 回答
2

我遇到了同样的问题,我犯了一个错误,只添加了以下 2 个标签之一。

实际错误确实具有误导性,因为您可能正在考虑一些 API 级别的 UI 问题。

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="<YOUR VALUE>"/>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

请注意,您还缺少这两个之一

于 2014-08-09T15:49:29.550 回答
1

我有一个类似的错误,我认为它来自这一点:当我包含 Google Play 服务 API 时,我没有将它复制到我的工作区中,我使用原始的!

注意:您应该引用复制到源代码树的库的副本——您不应该引用 Android SDK 目录中的库。

检查这一点。

于 2013-02-07T22:40:16.567 回答
1

我有类似的问题,我通过右键单击解决了project->tools>add support library......和setup library

我希望这对你有帮助

于 2013-07-22T21:58:43.430 回答
1

只需包含以下代码行onDestroy()

SupportMapFragment mapFragment = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map_location_sharing));

if(mapFragment != null) {
    FragmentManager fM = getFragmentManager();
    fM.beginTransaction().remove(mapFragment).commit();

它对我有用。希望对你也有用。谢谢

于 2014-03-13T06:02:24.943 回答
1

我也有这个错误,这是由于外部权限。这没有任何意义,但我添加了这个权限,从那时起一切正常。

于 2014-05-29T08:08:46.757 回答
1

在某些 android 6.0 移动设备中,此异常是错误如果无法扁平化 XML 导致

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Configuration android.content.res.Resources.getConfiguration()' on a null object reference

然后它是 android https://issuetracker.google.com/issues/35827842中的活动错误

这可以通过添加来解决

android:hardwareAccelerated="true" adding in activity tag
于 2017-04-16T07:57:36.053 回答
1

在我的情况下,使用两个元数据引用解决了这个问题:

<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="yourAPIkeyFromGoogleAPIConsole" />
于 2017-08-28T21:29:27.213 回答
0

我只是将 API 密钥添加到清单中,它有所帮助

于 2019-01-22T19:24:08.847 回答
0

我遇到了同样的问题,我刚刚将API_KEY添加到清单中,一切都很好。

   <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/map_api_key" />
于 2021-05-20T23:17:59.250 回答