【问题标题】:Binary XML file line #14: Error inflating class fragment - map v2二进制 XML 文件第 14 行:膨胀类片段时出错 - map v2
【发布时间】:2014-09-03 08:22:23
【问题描述】:

我想使用下面的例子,但是当我启动它时,我得到了这些错误:

示例链接:

http://wptrafficanalyzer.in/blog/driving-distance-and-travel-time-duration-between-two-locations-in-google-map-android-api-v2/

> 09-03 12:46:33.936: E/AndroidRuntime(15207): FATAL EXCEPTION: main
> 09-03 12:46:33.936: E/AndroidRuntime(15207):
> java.lang.RuntimeException: Unable to start activity
> ComponentInfo{in.wptrafficanalyzer.locationdistancetimemapv2/in.wptrafficanalyzer.locationdistancetimemapv2.MainActivity}:
> android.view.InflateException: Binary XML file line #14: Error
> inflating class fragment 09-03 12:46:33.936: E/AndroidRuntime(15207):
>   at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2247)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.app.ActivityThread.access$700(ActivityThread.java:152) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.os.Handler.dispatchMessage(Handler.java:99) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.os.Looper.loop(Looper.java:137) 09-03 12:46:33.936:
> E/AndroidRuntime(15207):  at
> android.app.ActivityThread.main(ActivityThread.java:5328) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> java.lang.reflect.Method.invokeNative(Native Method) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> java.lang.reflect.Method.invoke(Method.java:511) 09-03 12:46:33.936:
> E/AndroidRuntime(15207):  at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> dalvik.system.NativeStart.main(Native Method) 09-03 12:46:33.936:
> E/AndroidRuntime(15207): Caused by: android.view.InflateException:
> Binary XML file line #14: Error inflating class fragment 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.view.LayoutInflater.inflate(LayoutInflater.java:495) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.view.LayoutInflater.inflate(LayoutInflater.java:397) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.view.LayoutInflater.inflate(LayoutInflater.java:353) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:327)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.app.Activity.setContentView(Activity.java:1928) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> in.wptrafficanalyzer.locationdistancetimemapv2.MainActivity.onCreate(MainActivity.java:42)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.app.Activity.performCreate(Activity.java:5250) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  ... 11 more 09-03
> 12:46:33.936: E/AndroidRuntime(15207): Caused by:
> java.lang.IllegalStateException: The meta-data tag in your app's
> AndroidManifest.xml does not have the right value.  Expected 5089000
> but found 0.  You must have the following declaration within the
> <application> element:     <meta-data
> android:name="com.google.android.gms.version"
> android:value="@integer/google_play_services_version" /> 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> com.google.android.gms.common.GooglePlayServicesUtil.A(Unknown Source)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown
> Source) 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> com.google.android.gms.maps.internal.u.I(Unknown Source) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> com.google.android.gms.maps.internal.u.H(Unknown Source) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> com.google.android.gms.maps.SupportMapFragment$b.jz(Unknown Source)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> com.google.android.gms.maps.SupportMapFragment$b.a(Unknown Source)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> com.google.android.gms.dynamic.a.a(Unknown Source) 09-03 12:46:33.936:
> E/AndroidRuntime(15207):  at
> com.google.android.gms.dynamic.a.onInflate(Unknown Source) 09-03
> 12:46:33.936: E/AndroidRuntime(15207):    at
> com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown
> Source) 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:279)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  at
> android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682)
> 09-03 12:46:33.936: E/AndroidRuntime(15207):  ... 21 more

在我的布局 xml 中:

<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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv_distance_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" 
        android:layout_alignParentTop="true" />

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

</RelativeLayout>

在 MainActivity 中:

 SupportMapFragment fm =
 (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

我的 manifest.xml :

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

    <permission
        android:name="info.androidhive.googlemapsv2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="info.androidhive.googlemapsv2.permission.MAPS_RECEIVE" />

    <uses-sdk
        android:minSdkVersion="12"
        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" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- Required to show current location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- 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" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Goolge API Key -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyBZ*****9p6wksdax4TEjDVLgo" />
    </application>

</manifest>

更新:

我在 manifest.xml 中添加了以下代码:

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

我将片段元素从:

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

到:

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

我的项目运行了,但是我在屏幕上看不到任何地图。(我在真实设备上测试过)。

09-03 14:17:26.206: E/dalvikvm(8462): Could not find class 'gpq', referenced from method gpr.a
09-03 14:17:26.206: E/dalvikvm(8462): Could not find class 'gpq', referenced from method gpr.a
09-03 14:17:26.206: E/dalvikvm(8462): Could not find class 'gpq', referenced from method gpr.a
09-03 14:17:26.776: E/dalvikvm(8462): Could not find class 'com.google.android.gms.location.internal.ParcelableGeofence', referenced from method gls.a
09-03 14:17:43.591: E/Google Maps Android API(8462): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).

【问题讨论】:

  • 添加了我的 manifest.xml
  • 您是否链接了所需的.jars?
  • 看看我的回答@S.M_Emamian
  • 确保您在项目中添加了支持库,因为您使用的 API 级别低于 11。

标签: android android-layout android-fragments android-maps-v2


【解决方案1】:

您需要将布局文件中的片段更改为:

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

收件人:

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

仔细看看:class="com.google.android.gms.maps.SupportMapFragment"之间的区别

和:

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

还请阅读我就该主题撰写的这篇博文,确保您没有遗漏任何您在 Manifest xml 文件中遗漏的 mata-data 部分,从您收到的错误中可以清楚地看出这一点:

Google Maps API V2 Guide

更新:

您在清单文件中有双重权限:

<!-- 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" />

您应该删除其中一个。 而且您没有理由使用SupportMapFragment,因为您正在为高于11 的API 编写应用程序。所以只需使用MapFragment,并对Activity 进行相关更改。

【讨论】:

  • 已解决,但我在屏幕上看不到任何地图。 (我在真机上测试过)。
  • 你看过我所有的博文了吗?
【解决方案2】:

您的清单中缺少此元标记:

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

错误中很明显地说明了:

> java.lang.IllegalStateException: The meta-data tag in your app's
> AndroidManifest.xml does not have the right value.  Expected 5089000
> but found 0.  You must have the following declaration within the
> <application> element:     <meta-data
> android:name="com.google.android.gms.version"
> android:value="@integer/google_play_services_version" /> 09-03

【讨论】:

    【解决方案3】:

    只需在AndroidManifest.xml 文件中的&lt;application&gt; 标记内添加以下行

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

    如果您想获取 GoogleMap,则可以按如下方式对其进行初始化以访问它并将其加载到您的应用程序中。

    更改以下代码行:

    SupportMapFragment fm =
     (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    

    private GoogleMap mMap;
    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
    

    【讨论】:

    • 发布 5 分钟前已经发布的答案有什么意义?
    • 不是我的答案,@user3249477 已经在您之前 5 分钟指出了这个解决方案。实际上我的回答也包含这个。如果您访问博客,则可以了解更多详细信息。但这与您发布已经写好的答案这一事实无关。
    • 尝试使用mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();获取地图,查看我的答案。
    • 这与他在屏幕上没有看到地图这一事实无关。
    • 请在您的问题@S.M_Emamian 中发布您的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多