使用 Android 膨胀类片段时出错

Posted

技术标签:

【中文标题】使用 Android 膨胀类片段时出错【英文标题】:Error inflating class fragment with Android 【发布时间】:2014-04-11 22:01:39 【问题描述】:

非常简单的演示,然后是 Google Api

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
      android:layout_
      android:layout_
      android:name="com.google.android.gms.maps.MapFragment"/>

Location.java

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

public class Location extends FragmentActivity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);
    

一个

这是我的 Mainfest ...所有这些都遵循 google Api.65465465465465465464* 55444444444444444444444444444444444444444444444444444444444444ssssssssssssssssssssssssssssssssssssssssssssssssssssdsad

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ie.wit.bookbank"
android:versionCode="1"
android:versionName="1.0" >
 <uses-permission android:name="ie.wit.bookbank.permission.MAPS_RECEIVE" />
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />
<!-- camera -->
<uses-permission android:name="android.permission.CAMERA" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- map -->
<permission
    android:name="ie.wit.bookbank.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" />

<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" >
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyBrbh8Oa3az6rjBtcYUEZfQLrkKiOR5vUU" />

    <activity
        android:name="ie.wit.bookbank.Newbook"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="ie.wit.bookbank.Location"
        android:label="@string/app_name" >

    </activity>
</application>

</manifest>

是我添加的 googl-play-severir 错了吗?

【问题讨论】:

尝试了很多方法,但都不起作用。谁能帮帮我? 发布您的Manifest.xml 文件。 @user3396562 按照我的回答尝试并根据我的评论进行更正 【参考方案1】:

你的logcat说的很清楚

Caused by: java.lang.IllegalStateException: 中的元数据标记 您应用的 AndroidManifest.xml 没有正确的值。

预期为 4242000,但发现为 0。您必须在元素中具有以下声明:

将 Google Play 服务版本添加到您应用的清单中

编辑应用程序的 AndroidManifest.xml 文件,并添加 元素内的以下声明。这嵌入的版本 编译应用时使用的 Google Play 服务。

你需要在&lt;application&gt;标签下添加&lt;meta-data&gt;到你的AndroidManifest.xml

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

这是因为最新的 google play 服务需要一个版本名称,在 AndroidManifest.xml 中使用 &lt;meta-data .. /&gt; 提及

也改变这个

 <?xml version="1.0" encoding="utf-8"?>
  <fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_
  android:layout_
  android:name="com.google.android.gms.maps.MapFragment"/>

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_
  android:layout_
  android:name="com.google.android.gms.maps.SupportMapFragment"/>

【讨论】:

在那之后我有 03-08 18:08:54.016: E/AndroidRuntime(1378): Caused by: android.app.Fragment$InstantiationException: Unable to instance fragment com.google.android.gms .SupportMapFragment:确保类名存在,是公共的,并且有一个公共的空构造函数 03-08 18:08:54.016: E/AndroidRuntime(1378): Caused by: java.lang.ClassNotFoundException: 找不到类路径上的“com.google.android.gms.SupportMapFragment”:DexPathList[[zip 文件“/data/app/ie.wit.bookbank-2.apk”],nativeLibraryDirectories=[/data/app-lib/ie.wit .bookbank-2, /system/lib]] 我错过了什么吗? @user3396562 您是否已将google_play_services_lib 添加到您的项目中?并发布您的 manifest.xml 文件 @user3396562 我有你的问题。我认为您在android:name="com.google.android.gms.SupportMapFragment 正确 中写错了,例如android:name="com.google.android.gms.maps.SupportMapFragment。这是错字。【参考方案2】:

原因:java.lang.IllegalStateException:你的元数据标签 应用程序的 AndroidManifest.xml 没有正确的值。预期的 4242000 但找到 0。您必须在其中有以下声明 元素:

确保您拥有更新的 google play 服务,即 rev 15

将以下内容添加为应用程序标记的子项,它应该可以工作

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

你也需要改变

android:name="com.google.android.gms.maps.MapFragment"/>

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

【讨论】:

在那之后我有 03-08 18:08:54.016: E/AndroidRuntime(1378): Caused by: android.app.Fragment$InstantiationException: Unable to instance fragment com.google.android.gms .SupportMapFragment:确保类名存在,是公共的,并且有一个公共的空构造函数 03-08 18:08:54.016: E/AndroidRuntime(1378): Caused by: java.lang.ClassNotFoundException: 找不到类路径上的“com.google.android.gms.SupportMapFragment”:DexPathList[[zip 文件“/data/app/ie.wit.bookbank-2.apk”],nativeLibraryDirectories=[/data/app-lib/ie.wi‌ ​t.bookbank-2, /system/lib]] 我忘记导入一些东西了吗? 你有没有在你的安卓项目中引用过google play services library项目

以上是关于使用 Android 膨胀类片段时出错的主要内容,如果未能解决你的问题,请参考以下文章

android.view.InflateException:二进制 XML 文件:膨胀类片段时出错

Android android.view.InflateException Binary XML 文件第 16 行:膨胀类片段时出错

膨胀类片段时出错

android.view.InflateException 膨胀类片段时出错,二进制 XML 文件第 1 行?

android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错

Google Map API 问题:android.view.InflateException:二进制 XML 文件第 2 行:二进制 XML 文件第 2 行:膨胀类片段时出错