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:
a library
.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 à
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
J'ai utilisé "Erreur de gonflage du fragment de classe" avec Google Map pour essayer de résoudre mes problèmes.
J'ai référencé Ce guide de démarrage rapide de Google Maps pour créer mon projet.
J'avais commencé avec l'exemple de code de l'introduction de Google Maps Android V2 Api
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.
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"/>
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.
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
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
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
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" />
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!
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
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
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
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é.
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.
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
J'ai simplement ajouté une clé API pour se manifester et cela a aidé
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" />