web-dev-qa-db-fra.com

problèmes fréquents dans la vue Android, Erreur lors de l'analyse XML: préfixe indépendant

J'ai des problèmes fréquents dans la vue Android, Error parsing XML: unbound prefix on Line 2.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout Android:orientation="vertical" Android:id="@+id/myScrollLayout" 
Android:layout_width="fill_parent"  Android:layout_height="wrap_content">
    <TextView Android:layout_height="wrap_content" Android:layout_width="fill_parent" 
    Android:text="Family" Android:id="@+id/Family" 
    Android:textSize="16px" Android:padding="5px" 
    Android:textStyle="bold" Android:gravity="center_horizontal">
    </TextView>

    <ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent" Android:layout_height="wrap_content"
        Android:orientation="vertical" Android:scrollbars="vertical">
        <LinearLayout Android:orientation="vertical" Android:id="@+id/myMainLayout" 
        Android:layout_width="fill_parent"  Android:layout_height="wrap_content">
        </LinearLayout>
    </ScrollView>

</LinearLayout>
289
Pentium10

Deux raisons à cela peuvent arriver:

1) Vous voyez cette erreur avec un espace de nom incorrect ou une faute de frappe dans l'attribut. Comme 'xmlns' est faux, cela devrait être xmlns:Android

2) Le premier noeud doit contenir: xmlns:Android="http://schemas.Android.com/apk/res/Android"

3) Si vous intégrez AdMob, vérifiez les paramètres personnalisés comme ads:adSize, vous avez besoin

xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"

4) Si vous utilisez LinearLayout, vous devrez peut-être définir des outils:

xmlns:tools="http://schemas.Android.com/tools"

536
Pentium10

Je vais ajouter une réponse séparée simplement parce que je ne la vois pas ici. Ce n'est pas à 100% ce que Pentium10 a demandé, mais je me suis retrouvé ici en cherchant Error parsing XML: unbound prefix

Il s'avère que j'utilisais des paramètres personnalisés pour les annonces AdMob comme ads:adSize, mais je n'avais pas ajouté

    xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"

à la mise en page. Une fois que j'ai ajouté ça a très bien fonctionné.

100
MalcolmOcean

J'ai eu le même problème.

Assurez-vous que le préfixe (Android: [que ce soit]) est correctement orthographié et écrit correctement. Dans le cas de la ligne xmlns:Android="http://schemas.Android.com/apk/res/Android", assurez-vous que vous avez le préfixe complet xmlns:Android et qu'il est orthographié correctement. Idem avec tous les autres préfixes - assurez-vous qu'ils sont épelés correctement et que vous avez Android:[name]. C'est ce qui a résolu mon problème.

62
Daniel

Comme vous le mentionnez, vous devez spécifier le espace de noms de droite . Vous voyez également cette erreur avec un espace de noms incorrect.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns="http://schemas.Android.com/apk/res/Android"
         Android:layout_width="fill_parent"
         Android:layout_height="fill_parent"
         Android:padding="10dip">

ne fonctionnera pas.

Changement:

xmlns="http://schemas.Android.com/apk/res/Android"

à

xmlns:Android="http://schemas.Android.com/apk/res/Android"

Le message d'erreur fait référence à tout ce qui commence par "Android:", car XML ne sait pas ce qu'est l'espace de nom "Android:".

xmlns:Android le définit.

31
VonC

Cette erreur peut se produire si vous utilisez un préfixe non défini tel que:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >

<TabHost
    XYZ:id="@Android:id/tabhost"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >


</TabHost>

Le compilateur Android ne sait pas ce qu'est XYZ puisqu'il n'a pas encore été défini.

Dans votre cas, vous devez ajouter au-dessous de define le nœud racine du fichier XML.

xmlns:Android="http://schemas.Android.com/apk/res/Android"
23
Nguyen Minh Binh

erreur de préfixe non liée pour indicateur ViewPager:

Avec les balises d'en-tête suivantes dans votre parentLayout:

xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"

Ajoutez aussi:

xmlns:app="http://schemas.Android.com/apk/res-auto"

Cela a fait le tour pour moi.

10
amalBit

En ce qui me concerne, le message d'erreur "préfixe non lié" s'est affiché sur la première ligne, bien que j'avais mal orthographié Android à la quatrième ligne.

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
anrdoid:fillViewport="true"
>
9
flobacca

J'ai eu le même problème et j'ai trouvé que la solution consistait à ajouter Android: outils au premier nœud. Dans mon cas, c'est un LineraLayout:

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" 
    Android:orientation="vertical">
7
Sebastian Breit

Je vais en parler un peu plus pour les débutants et pour les gens, comme moi, qui ne comprennent pas XML.

Les réponses ci-dessus sont plutôt bonnes, mais la réponse générale est que vous avez besoin d'un espace de noms pour tout espace de noms utilisé dans le fichier config.xml.

Traduction: Tout nom de balise XML qui est est une balise avec un espace de noms où blah est l’espace de noms et fubar est la balise XML. L'espace de noms vous permet d'utiliser de nombreux outils différents pour interpréter le XML avec ses propres noms de balises. Par exemple, Intel XDK utilise l'espace de noms intelxdk et que Android utilise Android. Par conséquent, vous avez besoin des espaces de noms suivants, sinon la version générée jette du sang (erreur d’analyse de XML: préfixe non lié) qui est traduite en: Vous avez utilisé un espace de noms, mais vous ne l’avez pas défini.

  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  xmlns:intelxdk="http://xdk.intel.com/ns/v1"
3
turbogeek

OK, il y a beaucoup de solutions ici mais n'expliquons pas réellement la cause première du problème alors allons-y:

lorsque vous voyez un attribut tel que _Android:layout_width="match_parent"_, la partie Android est le préfixe, le format d'un attribut ici est _PREFIX:NAME="VALUE"_. En XML, les espaces de noms et les préfixes permettent d'éviter les conflits de noms. Par exemple, nous pouvons avoir deux attributs distincts portant le même nom, mais différents préfixes tels que: _a:a="val"_ et _b:a="val"_.

pour utiliser des préfixes tels que Android ou app ou un autre, vous devez définir un espace de nom utilisant l'attribut xmlns.

par conséquent, si vous avez ce problème, recherchez simplement les préfixes pour lesquels aucun espace de nom n’a été défini. Si vous avez _tools:..._, vous devez ajouter l’espace de nommage des outils comme suggéré par certains répondants, si vous avez l’attribut _app:..._, vous devez ajouter _xmlns:app="http://schemas.Android.com/apk/res-auto"_ à l'élément racine

Lectures complémentaires:

Explication simple des espaces de noms XML

espaces de noms XML dans W

2
mohas

Cette erreur se produit généralement si vous n'avez pas inclus correctement le xmlns:mm, il se produit généralement dans la première ligne de code.

pour moi c'était ..

xmlns: mm = "http://millennialmedia.com/Android/schema"

que j'ai raté en première ligne du code

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:mm="http://millennialmedia.com/Android/schema"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:layout_marginTop="50dp"
Android:layout_marginBottom="50dp"
Android:background="@Android:color/transparent" >
2
Kailas

A côté de tout cela, il y a aussi un scénario où cette erreur se produit-

Lorsque vous ou votre projet de bibliothèque définissez l'attribut personnalisé int attr.xml, vous utilisez ces attributs dans votre fichier de présentation sans définir d'espace de nom.

Généralement, nous utilisons cette définition d’espace de noms dans l’en-tête de notre fichier de présentation.

xmlns:Android="http://schemas.Android.com/apk/res/Android"

Ensuite, assurez-vous que tous les attributs de votre fichier commencent par

Android:ATTRIBUTE-NAME

Vous devez identifier si certains de vos attirbute ne commencent pas par autre chose qu’Android: ATTRIBUTE-NAME like

temp:ATTRIBUTE-NAME

Dans ce cas, vous avez ce "temp" aussi comme espace de noms, généralement en incluant-

xmlns:temp="http://schemas.Android.com/apk/res-auto"
1
Anuj Garg

Dans mon cas, l'erreur n'a été causée par aucun des problèmes d'espace de noms XML mentionnés ci-dessus. Au lieu de cela, il s'agissait de l'emplacement de l'attribut Android:id - il devait être le premier élément de la déclaration de l'élément en question.

Donc ça:

<TextView Android:layout_width="fill_parent" 
      Android:layout_height="wrap_content"
      Android:id="@+id/bottomtext" 
      Android:singleLine="true" />

... besoin de lire comme ceci:

<TextView Android:id="@+id/bottomtext" 
      Android:layout_width="fill_parent" 
      Android:layout_height="wrap_content"
      Android:singleLine="true" />
1
okredo

Vous devez simplement ajouter un espace de nom approprié dans votre balise racine. xmlns: Android = "http://schemas.Android.com/apk/res/Android" Android les elemets sont déclarés dans cet espace de noms.Cela revient à importer une classe ou un package.

1
Gevaria Purva

Cela m'arrive généralement lorsque je mal orthographie Android - je tape simplement andorid ou un mot similaire, et ce n'est pas évident à première vue, surtout après de nombreuses heures de programmation. Je recherche donc "Android" un à un. et voir si la recherche ignore une balise - si c'est le cas, j'examine de près et je vois où était la faute de frappe.

0
Nenad Bulatovic