35 votes

Fragment Android Google Maps dans le xml. J'obtiens "Unexpected namespace prefix" (préfixe d'espace de nom inattendu).

J'essaie d'apprendre à utiliser Android, et après avoir suivi les instructions sur la façon d'utiliser l'API Google Maps V.2, j'ai réussi à la faire fonctionner. Cependant, les instructions sur la façon de configurer l'état initial des cartes, qui se trouvent sur le site développeurs.google.com suggère un espace de nom défini dans le fichier xml, dans ce cas "map".

Le code xml ci-dessous donne l'erreur med "Préfixe d'espace de nom inattendu "map"". ". Essayer de définir le xmlns:carte à l'intérieur de la balise fragment a donné la même erreur mais avec "xmlns".

Il me manque manifestement des connaissances fondamentales en matière de xml. Quelqu'un peut-il m'aider ?

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"        
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:map="http://schemas.android.com/apk/res-auto"      <!-- Definition -->
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment 
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        map:cameraBearing="112.5"/>                            <!-- PROBLEM -->

</RelativeLayout>

2 votes

Vous devriez nettoyer le projet, parfois eclipse fait des erreurs stupides.

26voto

Kent Points 1211

J'ai également eu ce problème. J'ai fait Projet/Nettoyage et l'erreur a disparu et ça marche bien maintenant.

7 votes

Je n'utilise Eclipse que pour Android, je n'ai jamais compris pourquoi il ne nettoie pas automatiquement après lui. Le nettoyage ne fonctionne que jusqu'à ce que vous rééditiez le fichier XML, puis le problème se reproduit.

0 votes

@Rob avez-vous trouvé comment ne pas avoir l'erreur à chaque fois. Je dois nettoyer tout le temps

0 votes

@Snake malheureusement non, je n'ai pas beaucoup travaillé avec l'api google maps ces derniers temps donc je ne peux pas vraiment aider, désolé. Je suis cependant passé à l'utilisation d'Android Studio

20voto

marcel Points 154

Vous devez faire deux choses :

D'abord : https://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw

Ajoutez la dépendance à Google Play Services dans votre projet

Project -> Properties -> Android -> Library, Add -> google-play-services_lib

Deuxièmement : https://developers.google.com/maps/documentation/Android/intro

Sélectionnez Project > Properties , sélectionnez Java Build Path et naviguez jusqu'à Libraries . Sélectionnez Add External Jars incluez les fichiers jar suivants, puis cliquez sur OK :

<android-sdk-folder>/extras/android/compatibility/v4/android-support-v4.jar

Maintenant mon projet ne montre plus aucune erreur :)

1 votes

C'est la bonne solution. Notez que pour Android Studio, ajoutez google-play-services_lib comme une dépendance du module.

19voto

WigglyWorld Points 160

J'ai le même problème aujourd'hui. J'ai mis à jour le SDK hier soir et je n'avais pas vu ce problème auparavant. J'avais également chargé le projet de démonstration Android Map V2 et aujourd'hui le fichier "multimap_demo.xml" affiche l'erreur "Unexpected namespace prefix "map" found for tag fragment". J'ai appliqué l'inclusion xml suggérée et cela fonctionne à nouveau. Je lui donnerais bien un +1 mais je n'ai pas de crédit.

MISE À JOUR : J'ai oublié ce problème et j'ai retravaillé mon code aujourd'hui et supprimé l'include. Bien sûr, l'erreur est revenue. J'ai trouvé ceci et l'ai ajouté à la mise en page dans la strophe du fragment :

tools:ignore="MissingPrefix"

Cela semble au moins masquer le problème.

Mise à jour : Ce bogue est apparemment dû à un bogue dans Android Lint Tool. Voir le problème https://code.google.com/p/gmaps-api-issues/issues/detail?id=5002

13voto

Scott W Points 6023

Il existe une autre solution de contournement qui vous permet de continuer à tout configurer dans les fichiers de mise en page plutôt que dans le code Java. Étant donné que l'erreur ne semble se produire que lorsque le fichier SupportMapFragment est un enfant d'un ViewGroup dans le fichier de mise en page, on peut extraire le <fragment> dans son propre fichier de mise en page, puis l'inclure dans la mise en page plus importante souhaitée.

Par exemple, étant donné que vous essayez de faire ceci :

ma_magnifique_mise_en_scène.xml

...
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"        
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment 
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        map:cameraBearing="112.5"/>

</RelativeLayout>

Vous pourriez plutôt le décomposer comme suit :

inclure_map_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://scheams.android.com/apk/res-auto"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    map:cameraBearing="112.5"/>

ma_magnifique_mise_en_scène.xml

...
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"        
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include 
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        layout="@layout/include_map_fragment" />

</RelativeLayout>

0 votes

Je continue à recevoir : 'error : No resource identifier found for attribute {xmlParam} in package {packagename}'. Ce qui est étrange, c'est que je me souviens d'avoir mis le code fonctionnel dans mon dépôt il y a 3 ou 4 mois et que lorsque j'ai essayé de le compiler il y a quelques jours, j'ai obtenu la même erreur que l'auteur de l'article original.

4voto

Tobias Reich Points 1188

Bon, je sais, ce n'est pas vraiment une solution au problème de l'espace de nom, mais cela pourrait peut-être aider.

Comme je ne connais pas de solution XML, je l'ai fait de manière programmatique :

mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.setTrafficEnabled(true);
setupMapView();

private void setupMapView(){
 UiSettings settings = mMap.getUiSettings();        
 mMap.animateCamera(CameraUpdateFactory.newCameraPosition(
  new CameraPosition(new LatLng(50.0, 10.5), 
  13.5f, 30f, 112.5f))); // zoom, tilt, bearing
 mMap.setTrafficEnabled(true);
 settings.setAllGesturesEnabled(true);
 settings.setCompassEnabled(true);
 settings.setMyLocationButtonEnabled(true);
 settings.setRotateGesturesEnabled(true);
 settings.setScrollGesturesEnabled(true);
 settings.setTiltGesturesEnabled(true);
 settings.setZoomControlsEnabled(true);
 settings.setZoomGesturesEnabled(true);
}

Ainsi, la carte Google Map est initialisée par défaut mais reçoit ses paramètres directement après, à partir du code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X