web-dev-qa-db-fra.com

"Erreur de gonflement du fragment de classe" avec google map

J'ai essayé de créer un exemple de projet à l'aide de Google Map, mais je n'ai pas pu. Aidez-moi s'il vous plaît!

Appareil de test: Android 4.0.4


Message d'erreur :

12-29 23:45:32.605: E/AndroidRuntime(9437): FATAL EXCEPTION: main
12-29 23:45:32.605: E/AndroidRuntime(9437):
Java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.test_googlemap/com.example.test_googlemap.MainActivity}:
Android.view.InflateException: Binary XML file line #2: Error
inflating class fragment 12-29 23:45:32.605: E/AndroidRuntime(9437):
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1968)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1993)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.app.ActivityThread.access$600(ActivityThread.Java:127) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1159)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.os.Handler.dispatchMessage(Handler.Java:99) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.os.Looper.loop(Looper.Java:137) 12-29 23:45:32.605:
E/AndroidRuntime(9437):     at
Android.app.ActivityThread.main(ActivityThread.Java:4507) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Java.lang.reflect.Method.invokeNative(Native Method) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Java.lang.reflect.Method.invoke(Method.Java:511) 12-29 23:45:32.605:
E/AndroidRuntime(9437):     at
com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:790)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:557) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
dalvik.system.NativeStart.main(Native Method) 12-29 23:45:32.605:
E/AndroidRuntime(9437): Caused by: Android.view.InflateException:
Binary XML file line #2: Error inflating class fragment 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:697)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:466) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:396) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:352) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:271)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.app.Activity.setContentView(Activity.Java:1835) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
com.example.test_googlemap.MainActivity.onCreate(MainActivity.Java:11)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.app.Activity.performCreate(Activity.Java:4465) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1052)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1932)
12-29 23:45:32.605: E/AndroidRuntime(9437):     ... 11 more 12-29
23:45:32.605: E/AndroidRuntime(9437): Caused by:
Java.lang.ClassCastException: com.google.Android.gms.maps.MapFragment
cannot be cast to Android.support.v4.app.Fragment 12-29 23:45:32.605:
E/AndroidRuntime(9437):     at
Android.support.v4.app.Fragment.instantiate(Fragment.Java:394) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.support.v4.app.Fragment.instantiate(Fragment.Java:369) 12-29
23:45:32.605: E/AndroidRuntime(9437):   at
Android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.Java:272)
12-29 23:45:32.605: E/AndroidRuntime(9437):     at
Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:669)
12-29 23:45:32.605: E/AndroidRuntime(9437):     ... 20 more



Code source :

package com.example.test_googlemap;

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

}



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



Manifest.xml:

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

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

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name="com.example.test_googlemap.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="I removed it!"/>
        </application>    
    <permission
        Android:name="com.example.Test_GoogleMap.permission.MAPS_RECEIVE"
        Android:protectionLevel="signature"/>
    <uses-permission Android:name="com.example.Test_GoogleMap.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"/>

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

</manifest>
15
otheng

Vous étendez FragmentActivity, indiquant que vous essayez d'utiliser le Android Support du package de fragments de support. Cependant, votre élément <fragment> Fait référence à MapFragment, qui correspond à l'édition native de l'API niveau 11 des fragments.

Remplacez MapFragment par SupportMapFragment, et cela devrait éliminer ce plantage spécifique.

44
CommonsWare

J'ai eu le même problème et j'ai fait l'erreur de n'ajouter qu'une des 2 balises suivantes. Notez qu'il vous manque également l'un de ces deux

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

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

5
urnenfeld

Parfois, vous utilisez les deux -

<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="<YOUR VALUE>"
/>
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="<YOUR VALUE>"
/>

Assurez-vous de ne pas utiliser les deux ... si vous avez besoin d'emplacement, de lieux et de cartes, utilisez geo.API_KEY et si vous avez besoin de lieux et de cartes, utilisez maps.v2.API_KEY

3
HarshitG

La réponse acceptée est une information correcte mais significative que je partage avec vous, peut-être toute personne confrontée au même problème que moi

Si tout se réveille comme le code Google, veuillez vérifier le fichier manifeste dans mon cas, j'ai ajouté une clé géographique et une clé de carte, c'est pourquoi une exception se produit,

Remarque - n'ajoutez pas deux clés dans le fichier manifeste supprimez la clé de la carte

meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="@string/google_maps_key"/>

ci-dessus et ajoutez ce code.

 <meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="@string/auto_location"/>

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

Ce problème se produit également lorsqu'il n'est pas en mesure de gonfler la classe Fragment mentionnée dans activity_main.xml (ou le fichier XML présent sous res/layout), en raison d'une incompatibilité de version SDK dans le fichier andriod_manifest.xml.

Les versions correctes pour les niveaux du SDK pour obtenir la carte sur un émulateur sont les suivantes:

     <uses-sdk
    Android:minSdkVersion="11"
    Android:targetSdkVersion="21" />
1
user3737478

Dans mon cas, j'ai dû faire deux corrections pour faire disparaître cette exception.

  1. L'activité doit étendre FragmentActivity et non Activity
  2. Le fichier manifeste a besoin d'une autorisation d'utilisation pour ACCESS_NETWORK_STATE (mon fichier avait déjà une autorisation INTERNET)
1
rpkrpk

Même s'il s'agit d'une question déjà répondue, cette erreur peut également apparaître si vous appelez le super.onCreateViewdans votre fragment. Il plantera au moment de l'exécution.

Assurez-vous d'avoir remplacé la méthode onCreateView et gonflé votre mise en page:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    return view;
}
1
Thibault Fig

Ce défaut a été résolu dans la bibliothèque des services de jeux v9.0.0. https://code.google.com/p/gmaps-api-issues/issues/detail?id=9021#makechanges

1
Bharat Dodeja

Utilisez l'autorisation Internet pour être l'enfant direct du fichier manifeste .. Comme ci-dessous et essayez ..

Vous devez également disposer des éléments suivants pour utiliser la carte:

1.Doit étendre Map activity dans votre dossier d'activité

2.Doit avoir une clé API, je n'ai vu aucune clé dans votre code.

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


    <uses-permission Android:name="Android.permission.INTERNET"/>
    <uses-sdk
        Android:minSdkVersion="3"
        Android:targetSdkVersion="15" />
0
Subburaj