часті проблеми, що виникають при перегляді андроїда, помилка розбору XML: нев'язуваний префікс


296

У мене часті проблеми в андроїд зору 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>

9
Перевірте всі відповіді, розміщені на це; всі вони дійсні. Проблема - це простори імен XML, і декілька способів можуть жахливо помилитися.
whitey04

Швидке зауваження, якщо ви забудете зауважити ВСІ коментарі у своєму першому рядку, ви навіть не помітите, що щось не так з вашим макетом (наприклад: <? Xml version = "1.0" encoding = "utf-8"? > <! - придушити ВСЕ ->)
Майк

Відповіді:


555

Кілька причин, що це може статися:

1) Ви бачите цю помилку з неправильним простором імен або помилкою помилки в атрибуті. Як "xmlns" неправильно, так і має бутиxmlns:android

2) Перший вузол повинен містити: xmlns:android="http://schemas.android.com/apk/res/android"

3) Якщо ви інтегруєте AdMob, перевірте спеціальні параметри, як-от ads:adSizeвам потрібно

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

4) Якщо ви використовуєте LinearLayout, можливо, вам доведеться визначити інструменти:

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


Що ви маєте на увазі під «першим вузлом»? У оригіналі питання, що TextView?
Девід Дорія

1
... а в новому Google Play AdMob це: xmlns: ads = " schemas.android.com/apk/res-auto "
користувач1010160

Велике спасибі, я вирішив свою проблему у випадку 3, додавши цей рядок xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 для відповіді
Shylendra Madda

101

Я збираюся додати окрему відповідь лише тому, що я її тут не бачу. Це не на 100% те, що просив Pentium10, але я опинився тут, шукаючиError parsing XML: unbound prefix

Виявляється, я використовував спеціальні параметри для реклами AdMob, як ads:adSize, але я не додав

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

до макету. Після того, як я додав це, він працював чудово.


63

У мене була ця сама проблема.

Переконайтесь, що префікс (android: [що]] написано правильно та записано правильно. У разі рядка xmlns:android="http://schemas.android.com/apk/res/android" переконайтеся, що у вас є повний префікс xmlns:androidі чи правильно написано він. Те ж саме з будь-якими іншими префіксами - переконайтеся, що вони написані правильно та є android:[name]. Саме це і вирішило мою проблему.


1
Так, у моєму випадку помилка була викликана androi: src = "@ dravable / half" - що явно було неправильним!
ІгорГанапольський

Так, у мене була така ж проблема. Мені також не вистачало частини "xmln:".
користувач1032613

32

Як ви вже згадували, вам потрібно вказати правильний простір імен . Ви також бачите цю помилку з неправильним простором імен.

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

не вийде.

Змінити:

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

до

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

Повідомлення про помилку посилається на все, що починається "android:", оскільки XML не знає, що таке " android:" простір імен.

xmlns:android визначає це.


23

Ця помилка може виникнути, якщо ви використовуєте не визначений префікс, такий як:

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

Компілятор Android не знає, що таке XYZ, оскільки він ще не був визначений.

У вашому випадку слід додати нижче визначити до кореневого вузла файлу xml.

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


2
Цей зробив це для мене. Це був кульгавий тип: замість android: layout_weight я набрав anrdoid: layout_weigth.
Яхель

Nguyen, як визначити XYZ? Спасибі
Анатолій Шуба

10

помилка незв’язаного префікса для показника ViewPager:

Поряд із такими тегами заголовка у батьківській версії:

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

Також додайте:

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

Це зробило для мене трюк.


9

Для мене я отримав помилку "незв'язаний префікс" на першому рядку, хоча в четвертому рядку у мене неправильно написано android.

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

7

У мене була така ж проблема, і я виявив, що рішенням було додати андроїд: інструменти до першого вузла. У моєму випадку це 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">

Так, якщо ви посилаєтесь на інструменти, але не додаєте простір імен для інструментів, ви також отримаєте це.
Доктор Феррол Блекмон

3

Я кину трохи більше для новачків і для людей, як я, які не розуміють XML.

Відповіді вище досить непогані, але загальна відповідь полягає в тому, що вам потрібен простір імен для будь-якого простору імен, який використовується у файлі config.xml.

Переклад: Будь-яке ім'я тега XML - це тег із простором імен, де blah - це область імен, а fubar - тег XML. Простір імен дозволяє використовувати безліч різних інструментів для інтерпретації XML з власними іменами тегів. Наприклад, Intel XDK використовує простір імен intelxdk, а android використовує android. Таким чином, вам потрібні такі простори імен, або збірка підкидає кров (тобто помилка розбору XML: незв'язаний префікс), яка перекладається на: Ви використовували простір імен, але не визначали його.

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

3

Гаразд, тут є маса рішень, але насправді не пояснюють першопричину проблеми, тому ми переходимо:

коли ви бачите , атрибут , як android:layout_width="match_parent"в androidчастині є префіксом, формат для атрибута тут PREFIX:NAME="VALUE". у XML, простори імен та префікси - це способи уникнути конфліктування імен, наприклад, у нас може бути два різних атрибути з тим самим іменем, але різні префікси типу: a:a="val"та b:a="val".

щоб використовувати префікси типу androidабо appбудь-якого іншого, слід визначити простір імен за допомогою xmlnsатрибута.

тож якщо у вас є ця проблема, просто знайдіть префікси, у яких не визначено простір імен, якщо у вас є, tools:...ви повинні додати простір імен інструментів, як пропонують деякі відповіді, якщо у вас є app:...атрибут, ви повинні додати xmlns:app="http://schemas.android.com/apk/res-auto"до кореневого елемента

Подальше читання:

Прості пояснення XML в просторах імен

Простіри імен XML у W3


2

Ця помилка зазвичай виникає, якщо ви не включили xmlns:mmналежним чином, вона трапляється, як правило, у першому рядку коду.

для мене це було ..

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

що я пропустив у першому рядку коду

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

1

У моєму випадку помилка не була викликана жодною з вищезазначених проблем простору імен xml. Натомість це було місцезнаходження android:idатрибута - він повинен бути першим пунктом у декларації конкретного елемента.

Отже це:

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

... потрібно прочитати так:

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

1

Крім усього цього, існує також сценарій, коли ця помилка виникає -

Коли ви або ваш проект бібліотеки визначаєте спеціальний атрибут int attr.xml, і ви використовуєте ці атрибути у вашому файлі макета без визначення простору імен.

Зазвичай ми використовуємо це визначення простору імен у заголовку нашого файлу компонування.

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

Потім переконайтеся, що всі атрибути у вашому файлі повинні починатися

android:ATTRIBUTE-NAME

Вам потрібно ідентифікувати, якщо частина вашого attirbute не починається з чогось іншого, ніж андроїд: ATTRIBUTE-NAME, як

temp:ATTRIBUTE-NAME

У цьому випадку ви маєте цей "темп" також як простір імен, як правило, включаючи

xmlns:temp="http://schemas.android.com/apk/res-auto"

1

Вам просто потрібно додати належний простір імен у вашому кореневому тезі. xmlns: android = "http://schemas.android.com/apk/res/android" Елементи Android оголошені в цьому просторі імен. Це так само, як імпорт класу або пакета.


0

Зазвичай це трапляється зі мною, коли я неправильно написав андроїд - я просто набираю andorid або подібні, і це на перший погляд не очевидно, особливо після багатогодинного програмування, тому я просто займаюся пошуком "android" один за одним і бачу, чи пропускає пошук один тег - якщо так, то я пильно придивляюся і бачу, де був друк.


0

Я отримав цю помилку в Xamarin, коли я використовував

  <android.support.v7.widget.CardView  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    card_view:cardElevation="4dp"  
    card_view:cardCornerRadius="5dp"  
    card_view:cardUseCompatPadding="true">  
  </android.support.v7.widget.CardView>

у файлі макета без встановлення пакету nuget для android.support.v7.widget.CardView

Встановлення застосованого пакету нугів вирішило проблему. Сподіваюся, це допомагає, я не бачив цієї відповіді ніде в списку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.