web-dev-qa-db-fra.com

Google Maps V2 - Erreur de gonflage du fragment de classe

J'essaie ma main et le développement d'applications Android. J'utilise actuellement Eclipse (je ne me souviens plus de la version, quelle que soit la plus récente). J'ai traversé un pont où je n'arrive pas à comprendre ce que je fais mal. J'essaie d'utiliser l'API Google Maps V2. J'ai parcouru plusieurs documents et essayé plusieurs techniques, qui aboutissent toutes à la même erreur:

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

Cela fait deux jours que je frappe mon visage contre les touches du clavier pour tenter de comprendre ce que je fais de travers.

Choses que j'ai faites:

  1. Commencé avec une activité en blanc. 
  2. Projet -> Propriétés -> Android -> La cible de construction du projet correspond aux API de Google - 4.2 - API 17 - J'ai aussi essayé tous une autre option (à partir de la version 3.0 précédente, trouvé documenté
  3. Ajout de google-play-services_lib à mon explorateur de paquets. J'ai indiqué que google-play-services_lib était bien a library.
  4. Projet -> Propriétés -> Android -> Bibliothèque -> Ajouter -> et je choisis l'emplacement de google-play-services_lib.
  5. Android-support-v4.jar inclus en tant que dépendance de mon projet.

J'ai essayé de nombreuses réponses différentes à partir de questions semblables aux miennes, mais en vain. : ( Je peux généralement résoudre ce problème, mais je suis peut-être trop surchargé.

Mon paquet Explorer arborescence dans Eclipse ressemble à

  1. google-play-services_lib
  2. Svma

Voici le code:>

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

Manifeste

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


    }
}

Documents de référence

  1. J'ai utilisé "Erreur de gonflage du fragment de classe" avec Google Map pour essayer de résoudre mes problèmes.

  2. J'ai référencé Ce guide de démarrage rapide de Google Maps pour créer mon projet.

  3. J'avais commencé avec l'exemple de code de l'introduction de Google Maps Android V2 Api

  4. Toute une série de SO questions.

Alors, SO Communauté, qu'est-ce que je fais mal? Pourquoi suis-je incapable de saisir ce concept simple.

Merci d'avance.

35
user2048672

J'ai le même code/même problème! Essayez d'ajouter Android: name = "com.testing.svma.MainActivity" à "fragment" dans la mise en page! Cela a résolu le problème pour moi

<?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

Je sais que c'est probablement un fil mort, mais au cas où quelqu'un tomberait sur un problème identique, votre manifeste pourrait manquer les métadonnées suivantes:

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

Déclarez-le dans l'élément <application> et votre code devrait fonctionner. J'ai rencontré le même problème après un tutoriel youtube qui a sauté cette étape et ce n'est qu'en parcourant attentivement le tutoriel Google original que j'ai remarqué le code manquant.

Quoi qu'il en soit, espérons que cela aide quelqu'un.

30
David

J'ai eu le même problème, résolu en modifiant le manifeste . Ceci est mon manifeste.

 <?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>

Et le fichier XML est

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

La classe Java est

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

Cela a résolu mon problème

6
MickParedes

Essayez d'ajouter une référence à la bibliothèque google-play-services à votre projet. Si vous utilisez Eclipse, vous devez accéder aux projets Project->Properties->Android et Add google-play-services.

ALTERNATIVEMENT

Vous pouvez modifier le fichier project.properties manuellement ..____. Essayez d’ajouter une référence à votre bibliothèque google_play_services. Donc, mon fichier project.properties ressemble à:

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

Dans votre cas, le chemin de google-play-services lib peut être différent

J'ai essayé d'importer votre code et il s'est écrasé aussi. Quand j'ai modifié le fichier de propriétés, la carte est en cours d'exécution

3
Pavel Dudka

Je passe beaucoup de temps à essayer de résoudre ce problème et après beaucoup de lectures et d’essais, j’ai résolu en changeant le

public class MainActivity extends FragmentActivity

pour ça

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

J'espère que cela pourra vous aider

2
Dazuku

Souvent, le problème est dans Manifest.xml, assurez-vous donc d’écrire les autorisations appropriées, telles que: `

    <?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>

`

n'oubliez pas <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" /> et <meta-data Android:name="com.google.Android.gms.version" Android:value="@integer/google_play_services_version" />

2
Context

Avait essayé toutes les réponses ci-dessus sur une période de quelques jours et puis finalement cela a fonctionné:

Projet -> Propriétés -> Android -> Cible de construction du projet 

Changé la cible de construction du projet à Android 4.3 (API 18) et cliqué sur Appliquer

Dans le manifeste, j'ai ensuite modifié manuellement les versions sdk minimale et cible:

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

Cela correspond maintenant au target=Android-18 dans le fichier project.properties (résultant du changement de cible de génération de projet que nous avons effectué en premier).

J'ai aussi essayé Android:minSdkVersion="11" qui a fonctionné de manière à ce que la targetSdkVersion soit l'élément le plus important.

J'espère que cela aide quelqu'un!

2
ferekdoley

Incluez simplement la ligne de code suivante sur onDestroy()

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

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

Cela a fonctionné pour moi. Espérons que cela fonctionnera pour vous aussi. Merci

1
Justcurious

J'ai un problème similaire que j'ai résolu par un clic droit project->tools>add support library ... Et setup library 

J'espère que cela vous aide

1
gokhan

Dans Android 6.0 Mobile, cette exception est un bogue.

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

Il s’agit alors d’un bogue actif dans Android https://issuetracker.google.com/issues/35827842

Cela peut être résolu en ajoutant 

Android:hardwareAccelerated="true" adding in activity tag
1
Murali

J'ai eu cette erreur aussi et c'était dû à des autorisations externes. Cela n'a aucun sens mais j'ai ajouté cette permission et depuis, tout a bien fonctionné.

1
Gonzo345

J'ai eu une erreur similaire et je pense que cela vient de ce point: lorsque j'inclus l'API du service Google Play, je ne la copie pas dans mon espace de travail, j'utilise celle d'origine !!!

Remarque : Vous devez référencer une copie de la bibliothèque que vous avez copiée dans votre arborescence source. Vous ne devez pas référencer la bibliothèque à partir du répertoire du SDK Android.

Vérifiez ce point.

1
AntoineP

J'ai eu le même problème et j'ai fait l'erreur de ne rajouter qu'une des 2 balises suivantes.

L'erreur réelle est vraiment trompeuse, car vous pourriez penser à un problème d'interface utilisateur au niveau de l'API.

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

Notez qu'il vous manque également l'un de ces deux

1
urnenfeld

J'ai simplement ajouté une clé API pour se manifester et cela a aidé

0
S. Koshelnyk

utiliser les deux références de métadonnées résolvait le problème dans mon cas:

<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
Parkbrakereminder