web-dev-qa-db-ja.com

Google Maps V2-クラスフラグメントの膨張エラー

私は自分の手を試していますAndroid Application Development。現在Eclipseを使用しています(最新のものは何でもバージョンを思い出せません)。 Google Maps V2 APIを使用しようとしていますが、いくつかのドキュメントを調べていくつかのテクニックを試しましたが、すべて同じエラーになります。

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

私はここで間違っていることを把握しようとして、2日間まっすぐキーに顔を打ちつけてきました。

私がやったこと:

  1. 空のアクティビティから始めました。
  2. プロジェクト->プロパティ-> Android->Project Build Target is Google APIs-4.2-API 17-試したevery他のオプションも同様です(バージョン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. google-play-services_lib
  2. Svma

コードは次のとおりです:>

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. Googleマップで「クラスフラグメントを膨らませるエラー」 を使用して、問題を解決しようとしました。

  2. このGoogleマップのクイックスタートガイド を参照して、プロジェクトを作成しました。

  3. 最初は Googleマップの概要のサンプルコードAndroid V2 Api

  4. たくさんのSO質問。

だから、SO Community、私は何を間違えているのでしょうか?なぜこの単純な概念を理解できないのですか?.

前もって感謝します。

35
user2048672

同じコード/同じ問題があります! Android:name = "com.testing.svma.MainActivity"をレイアウトの "fragment"に追加してみてください!それは私のために問題を解決しました

<?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"/>
23
user1851212

私はこれがおそらくデッドスレッドであることを知っていますが、万が一誰かがここで同じ問題に遭遇した場合に備えて-あなたのマニフェストには次のメタ情報が欠けているかもしれません:

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

<application>要素内で宣言すると、コードが機能するはずです。このステップをスキップしたyoutubeチュートリアルに従って同じ問題に遭遇しましたが、元のGoogleチュートリアルを注意深く調べたときにのみ、コードが欠落していることに気付きました。

とにかく、これが誰かを助けることを願っています。

32
David

私も同じ問題を抱えていたので、マニフェストを修正して解決しました。これは私のマニフェストです。

 <?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);
           }
        }

それは私の問題を解決しました

6
MickParedes

プロジェクトにgoogle-play-servicesライブラリ参照を追加してみてください。 Eclipseを使用している場合は、Project->Properties->AndroidおよびAdd google-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へのパスは異なる場合があります

コードをインポートしようとしましたが、同様にクラッシュしました。プロパティファイルを変更したとき-マップを実行しています

3
Pavel Dudka

私はこの問題を解決するために多くの時間を費やし、多くの読書と試みの後、私は

public class MainActivity extends FragmentActivity

このため

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

これがお役に立てば幸いです

2
Dazuku

多くの場合、問題は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" />を忘れないでください

2
Context

数日間にわたって上記のすべての答えを試してみましたが、最終的にはこれが機能しました:

プロジェクト->プロパティ-> Android-> Project Build Target

プロジェクトのビルドターゲットをAndroid 4.3(API 18)に変更し、[適用]をクリックしました

マニフェストで、最小およびターゲットのSDKバージョンを手動で変更しました。

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

これは、project.propertiesファイルのtarget=Android-18と一致します(最初に行ったプロジェクトビルドターゲットの変更の結果)

Android:minSdkVersion="11"も試してみたので、targetSdkVersionが重要なビットです。

これが誰かを助けることを願っています!

2
ferekdoley

onDestroy()に次のコード行を含めるだけです

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

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

それは私にとってもうまくいきました。ありがとう

1
Justcurious

project->tools>add support library ...およびsetup libraryを右クリックして解決した同様の問題があります

これがお役に立てば幸いです

1
gokhan

一部のAndroid 6.0 mobileでは、この例外はバグです。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
1
Murali

私もこのエラーを経験しましたが、それは外部許可によるものでした。意味はありませんが、この許可を追加すると、それ以降はすべて正常に機能しました。

1
Gonzo345

私は同様のエラーがあり、この点から来ていると思います:Google Play Service APIを含めると、ワークスペースにコピーせず、元のものを使用します!!!

:ソースツリーにコピーしたライブラリのコピーを参照する必要があります。Android SDKディレクトリからライブラリを参照しないでください。

この点を確認してください。

1
AntoineP

私は同じ問題を抱えていて、次の2つのタグのうち1つだけを追加するというミスを犯しました。

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

これら2つのうちの1つも欠落していることに注意してください

1
urnenfeld

マニフェストにAPIキーを追加しただけで役に立ちました

0
S. Koshelnyk

私の場合、両方のメタデータ参照を使用して問題を解決していました。

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