android.view.InflateException: wiersz pliku binarnego XML nr 12: Błąd napełniania klasy <unknown>


147

Otrzymuję wiele rodzajów błędów wyświetlanych w subj. Te błędy wydają się sporadyczne i nie mogę ich odtworzyć. Ze stosu mogę się dowiedzieć, że taki błąd może wystąpić w przypadku moich różnych zasobów układu. Linia XML również się różni.

Czy ktoś może wyjaśnić, dlaczego występuje ten błąd? A co mogę zrobić, aby rozwiązać ten problem?

Stos

=============================================================

com.fsp.android.f generated the following exception:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fsp.android.f/com.life360.android.ui.tour.TourActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class <unknown>

--------- Stack trace ---------
1. android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2649)
2. android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2674)
3. android.app.ActivityThread.access$2200(ActivityThread.java:131)
4. android.app.ActivityThread$H.handleMessage(ActivityThread.java:1975)
5. android.os.Handler.dispatchMessage(Handler.java:99)
6. android.os.Looper.loop(Looper.java:123)
7. android.app.ActivityThread.main(ActivityThread.java:4702)
8. java.lang.reflect.Method.invokeNative(Native Method)
9. java.lang.reflect.Method.invoke(Method.java:521)
10. com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12. dalvik.system.NativeStart.main(Native Method)
-------------------------------

----------- Cause -----------
android.view.InflateException: Binary XML file line #12: Error inflating class <unknown>

1. android.view.LayoutInflater.createView(LayoutInflater.java:513)
2. com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
3. android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
4. android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
5. android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
6. android.view.LayoutInflater.inflate(LayoutInflater.java:382)
7. android.view.LayoutInflater.inflate(LayoutInflater.java:320)
8. android.view.LayoutInflater.inflate(LayoutInflater.java:276)
9. com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:208)
10. android.app.Activity.setContentView(Activity.java:1629)
11. com.solvek.sample.ui.BaseActivity.onCreate(BaseActivity.java:23)
12. com.solvek.sample.ui.tour.TourActivity.onCreate(TourActivity.java:161)
13. android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
14. android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2587)
15. android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2674)
16. android.app.ActivityThread.access$2200(ActivityThread.java:131)
17. android.app.ActivityThread$H.handleMessage(ActivityThread.java:1975)
18. android.os.Handler.dispatchMessage(Handler.java:99)
19. android.os.Looper.loop(Looper.java:123)
20. android.app.ActivityThread.main(ActivityThread.java:4702)
21. java.lang.reflect.Method.invokeNative(Native Method)
22. java.lang.reflect.Method.invoke(Method.java:521)
23. com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
24. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
25. dalvik.system.NativeStart.main(Native Method)
-----------------------------

-------- Environment --------
Time =2010-12-20 08:27:35 AM
Device =tmobile/htc_espresso/espresso/espresso:2.1-update1/ERE27/216830:user/release-keys
Make =HTC
Model =T-Mobile myTouch 3G Slide
Product =htc_espresso
App =com.fsp.android.f, version 2.0.9 (build 1232)

Oto wynik XML, jednak taki błąd występuje w innych plikach XML

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <ViewFlipper android:layout_gravity="fill" android:id="@+id/flipper" android:layout_height="fill_parent" android:layout_width="fill_parent">
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_1"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_2"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_3"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_4"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_5"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_6"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_7"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_8"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_9"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_10"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_11"/>
    </ViewFlipper>

    <LinearLayout android:id="@+id/exit_bar" android:layout_gravity="top" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/blue_bar" android:visibility="invisible">
        <Button android:background="@drawable/orange_btn" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" android:textStyle="bold" android:textColor="#000000" android:shadowColor="#ffffff" android:shadowRadius="1.6" android:shadowDx="1.5" android:shadowDy="1.3" android:id="@+id/exit_tour_btn" android:text="Exit" android:layout_marginLeft="20dip"/>
        <TextView android:layout_height="wrap_content" android:textColor="#ffffff" android:layout_gravity="center" android:layout_width="110dip" android:layout_marginLeft="20dip" android:textSize="16dip" android:textStyle="bold" android:text="Life360 Tour"/>

    </LinearLayout>

    <Button style="@style/BlueBtn" android:text="Continue" android:layout_marginTop="40dip" android:id="@+id/continue_btn" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" />

    <FrameLayout android:id="@+id/bottom_bar" android:layout_gravity="bottom" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/blue_bar" android:visibility="invisible">
        <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/left" android:layout_gravity="left|center" android:background="@drawable/tour_left" android:layout_marginLeft="10dip"/>
        <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/right" android:layout_gravity="right|center" android:background="@drawable/tour_right" android:layout_marginRight="10dip"/>               
    </FrameLayout>
</merge>

Odpowiedzi:


266

Wyjątek zawyżania nie jest w rzeczywistości problemem, ale tak naprawdę pochodzi z innego, głębszego problemu w układzie, który jest następnie zawijany w wyjątek InflateException. Częstym problemem jest wyjątek braku pamięci podczas próby zawyżenia widoku obrazu podczas ładowania zasobu do rysowania. Jeśli jeden z tych zasobów ma wysoką rozdzielczość pikseli, zajmie dużo pamięci, powodując wyjątek zawyżania.

Więc zasadniczo sprawdź, czy rozdzielczość pikseli w twoich rysunkach jest tylko minimum niezbędnym dla twojego układu.


4
@vnportnoy Mam też ten sam błąd, kiedy
usuwam

4
Wydaje mi się, że nie mam żadnych rysunków w mojej aplikacji
Arturas M

3
Spróbuj sprawdzić swój pakiet językowy, prawdopodobnie brakuje zasobu ciągu. To powodowało problem w moim przypadku.
Mohammed Subhi Sheikh Quroush

Jeśli problem dotyczy testów oprzyrządowania, spróbuj tego: stackoverflow.com/q/24904445
Jerry Destremps,

Po usunięciu widoku obrazu z mojego pliku xml nadal błąd występuje w ścieżce klasy „com.android.tools.build:gradle:3.0.0-alpha2” i kompilowaniu „com.android.support.constraint: constraint-layout: 1.0.2”
Subho

24

ViewFlipperładuje wszystkie obrazy do pamięci podczas wypełniania układu. Ponieważ moje obrazy są duże zajmuje wiele pamięci, wymieniłem ViewFlipperz ImageSwitcherktórego można zmienić obrazy z animacji jak ViewFlipperale ładuje tylko jeden obraz w czasie.


23

Może się to również zdarzyć, jeśli VectorDrawableużywasz biblioteki obsługi using i zapomniałeś jej użyć app:srcCompatzamiastandroid:src

Dokładny błąd to: Wiersz pliku binarnego XML #XX: Błąd napełniania klasy ImageView

Zobacz ten link


Po aktywacji zawsze powinieneś używać app: srcCompat
Mohamed ALOUANE

Ale to nie spowoduje przypadkowej awarii.
Menna-Allah Sami

11

Miałem ten sam błąd podczas tworzenia widoku niestandardowego z tylko jednym konstruktorem, spróbuj zdefiniować wszystkich konstruktorów dla niestandardowych widoków.

   public CustomWebView(Context context) {
        super(context);
        init();
    }

    public CustomWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

11

Wiem, że na to pytanie jest już odpowiedź, ale nadal piszę z myślą, że ktoś może napotkać tego rodzaju problem.

W moim przypadku problem polega na tym, że ładuję aplikację na telefon, która odwołuje się do układów z res / layout / folder i wartości dla @dimens z res / values ​​/ dimens tutaj jest to font_22, do którego próbuje uzyskać dostęp i jest zdefiniowany w res / values-xlarge / dimens.

W rzeczywistości aktualizuję interfejs użytkownika istniejącego projektu.

Natknąłem się na ten problem, ponieważ używam IDE Eclipse, w którym ctrl + spacja na podpowiedź podczas pisania xml dla folderu układu, wyświetla wszystkie wartości z folderu wartości, a także folder values-xlarge, niezależnie od tego, dla którego folderu piszę.

Wiem też, że wartości w obu plikach powinny być takie same, aby były mapowane na różne ekrany.

Mam nadzieję, że może to pomóc komuś napotkać tego rodzaju głupi problem.


9

Napotkałem ten sam błąd i znalazłem główny powód:

Użyj kontekstu aplikacji, aby zwiększyć widok.

Nadmuchiwanie z kontekstem aktywności naprawiło błąd.


6

Mój rozmiar obrazu to tylko 14Kb, ale problem polega na tym, że projektant dał mi 1011px x 1819px (rozdzielczość jest zbyt wysoka, co powoduje wyjątek InflateException)


6

Gdyby ktoś miał podobne problemy, miałem taki problem przy zawyżaniu widoku:

View.inflate(getApplicationContext(), R.layout.my_layout, null)

stałej zastępując getApplicationContext()wthis


5

Wystąpił ten błąd, ponieważ wybrałem motyw jako motyw Material. Ale ponieważ próbowałem uruchomić aplikację na 4.4.2, dało ten błąd.

Rozwiązanie: Wybierz Theme_holo jako motyw


Mój problem może być podobny do twojego, ponieważ awarię widzę tylko dalej 4.2.2. Ale gdzie mogę zmienić motyw Material na Theme_holo? Nie widzę słowa kluczowego Materiał w moim styles.xmllub v21/styles.xml. Zobacz moje pytanie: stackoverflow.com/questions/37883677/…
Katedral Pillon

4

Ten link może ci pomóc. Spróbuj sprawdzić swój manifest pod kątem problemów. Jeśli możesz to powtórzyć, opublikuj cały ślad stosu, abyśmy mogli zobaczyć, na czym właściwie polega błąd.

EDYCJA: Jestem pewien, że to sprawdziłeś, ale co jest w linii 12 pliku XML, którego używasz do układu TourActivity?


Przeczytałem ten numer. To nie moja sprawa (przynajmniej ja tego nie widzę). Dodawanie stosu do pytania.
Solvek,

Zaktualizowana odpowiedź, czy możesz opublikować XML? Jeśli nie masz nic przeciwko, opublikuj cały plik XML, jeśli nie jest zbyt duży.
Kevin Coppock

Dodano XML do początkowego pytania
Solvek

Hmm, niestety nie mam doświadczenia w używaniu merge lub ViewFlipper ... Czy wszystkie pliki XML, które to się dzieje, używają merge lub ViewFlipper?
Kevin Coppock

Nie. Inne pliki nie mają scalenia Flippera, ale nadal mają ten sam problem.
Solvek,

4

Dla mnie komunikat o błędzie był faktycznie niewystarczający w log cat, więc oto co zrobiłem, aby dowiedzieć się, co spowodowało problem:

(W komunikacie o błędzie dziennika cat jest napisane, że błąd wystąpił podczas zawyżania określonego układu w moim HomeFragment.java)

  1. Punkt przerwania umieściłem tuż przed zawyżeniem układu
  2. Uruchomiłem aplikację w trybie debugowania, dopóki nie osiągnęła tego konkretnego punktu przerwania
  3. Wybrałem linię kursorem i pobiegłem Evaluate expression na nią:
    • Run > Evaluate Expression lub alt - F8
  4. Wynik pokazał mi więcej informacji o źródle problemu, którym w moim przypadku był plik do rysowania przy użyciu tools:targetApi="lollipop"(błąd wystąpił tylko na starszych urządzeniach).

Dzięki! To pomogło mi znaleźć problem!
Sergey Stasishin

4

Znalazłem ten sam błąd i ustalenie, na czym polegał błąd, zajęło dwa dni.

Błąd był po prostu dlatego, że próbowałem użyć: android:background

Zamiast: app:srcCompat

w pliku SVG.

W twoim przypadku uważam, że to jest to

<ImageView 
    android:scaleType="fitXY" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:src="@drawable/tour_11"      <-- the error is here !
 />

Polecam używać tego w ten sposób

dodaj to do swojej aplikacji build.gradle

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }

i

<androidx.appcompat.widget.AppCompatImageView  <-- use **AppCompatImageView** not **ImageView**
        android:scaleType="fitXY" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        app:srcCompat="@drawable/tour_11"
     />

Mam nadzieję, że to pomoże.


3

Wiem, że jest to pytanie, na które udzielono odpowiedzi, ale nie widzę przyczyny, przed którą stanąłem.

To było to, że Android Studio umieściło moje drawables w / drawable-V24. Mój emulator to API 23. Więc ostatecznie nie może go znaleźć.

Rozwiązaniem było przeniesienie wszystkich drawables do folderu / drawable (nr -24).


Miałem też ten sam przypadek.
Rafael

3

Powinieneś skopiować pliki graficzne z folderu „drawable-24” do folderu „drawable”.


2

Miałem ten sam błąd i rozwiązałem przenoszenie moich drawables z folderu drawable-mdpi do folderu drawable. Zajęło mi to trochę czasu, zanim zdałem sobie z tego sprawę, ponieważ w Eclipse wszystko działało idealnie, podczas gdy w Android Studio dostałem te brzydkie błędy uruchomieniowe.

Uwaga dotycząca edycji: jeśli przeprowadzasz migrację z eclipse do Android Studio, a Twój projekt pochodzi z eclipse, może się tak zdarzyć, więc uważaj, że w Android Studio rzeczy trochę różnią się od eclipse.


2

W moim przypadku ten błąd występuje, gdy używam pływającego przycisku akcji i ustawiam android:backgroundTint="#000". Więc po prostu nie ustawiaj backgroundTinti nie rozwiązuj problemu. Mam nadzieję, że to Ci pomoże.


Dzięki, to rzeczywiście był problem w moim przypadku. Musisz użyć app:backgroundTintzamiast android:backgroundTint.
Drago

2

Dla mnie moim problemem było to, że byłem

android:background="?attr/selectableItemBackground"

Na tle LinearLayout, gdy je usunąłem, test przeszedł.


1

Miałem ten problem właśnie teraz i udało mi się dowiedzieć, co to jest. Odwoływałam się do koloru w moich wartościach, który powodował problemy. Zdefiniowałem to ręcznie, zamiast korzystać z jednej z sugestii na liście rozwijanej.


1

Wystąpił ten sam błąd, gdy uruchomiłem aplikację na poziomie API 16 (26 było w porządku). To dlatego, że użyłem ?attrr/colorAccentw moim kształcie do rysowania:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="8dp" />

    <solid android:color="@attr/colorAccent" />

</shape>

Zastąpienie tego zwykłym kolorem rozwiązało mój problem.


1

Miałem ten sam problem i rozwiązałem go, usuwając drawable-v24 z (24) przed obrazami w folderze do rysowania i zastępując je zwykłymi rysunkami.


1

Wiem, że ten wątek jest stary, ale wciąż na niego odpowiadam, aby nikt inny nie mógł spędzać bezsennych nocy.

Refaktoryzowałem stary projekt, którego pliki układów zawierały zakodowane na stałe atrybuty, takie jak android:maxLength = 500. Postanowiłem więc zarejestrować to w swoim res/dimenpliku jako <dimen name="max_length">500</dimen>.

Zakończyłem refaktoryzację prawie 30 plików układu z moją wartością res. Zgadnij co? następnym razem, gdy uruchomiłem projekt, zaczęło rzucać to samo InflateException.

Jako rozwiązanie, potrzebne do ponownego wprowadzenia wszystkich zmian i zachowania tych samych wartości, co poprzednio.

TLDR;

Krok 1: Wszystko działa dobrze.

Krok 2: Aby przyspieszyć konserwację, zastąpiłem android:maxLength = 500go <dimen name="max_length">500</dimen>i android:maxLength = @dimen/max_length, właśnie tam wszystko poszło nie tak (awaria zInflateException ).

Krok 3: Wszystko działa źle

Krok 4: Ponownie zrobić wszystko przez moją pracę ponownie wymianie android:maxLength = @dimen/max_lengthzandroid:maxLength = 500 .Everything został naprawiony.

Krok 5: Wszystko działa dobrze.


1

Rozwiązałem to, przenosząc wszystkie moje elementy do rysowania z drawable-v24 do drawable


0

Ja też miałem podobny problem. Chociaż dla każdego może to być problem różnych złych zastosowań w kodzie, takich jak

  1. Niewłaściwy tag układu w XML
  2. Ładowanie ciężkiego zasobu bezpośrednio do ImageView skutkujące OOM
  3. Problemy z używaniem stylów.

Najbardziej ignorowanym czynnikiem może być użycie poprawnego kontekstu podczas zawyżania liczby wyświetleń. Sprawdź, czy nie używasz ApplicationContext, gdzie wymagany jest kontekst działania. Chociaż ApplicationContext może nie zawsze kończyć się błędem, ale w zależności od hierarchii widoku może mieć kluczowe znaczenie.

Rozwiązałem swój problem z BADOWYM kontekstem (używając ApplicationContext zamiast Activity w ciągu 4 dni! Więc spróbuj, jeśli to rozwiązuje. Miłego kodowania !!


0

Napotkałem ten sam problem, użyłem tagu widoku w xml zamiast widoku. Zastąpienie klasy View rozwiązało problem.

Mam nadzieję, że to też pomoże.


0

Musimy sprawdzić wersję API. Kiedyś dać kolor tła do mojego LinearLayoutLike

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/as_royalblue"
        android:orientation="vertical"></LinearLayout>

na pewno miałem ten sam błąd, as_royalblue.xmlwewnątrz drawablefolderu

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="90"
        android:endColor="@color/royalblue_s"
        android:startColor="@color/royalblue_e" />
</shape>

i jak to naprawiłem , w rzeczywistości wydaje się, że problem z Api, więc musimy sprawdzić poziom API, jeśli jest powyżej API 24, abyśmy mogli używać tak, jak lubimy. Ale jeśli ma mniej niż 24 lata, musimy unikać użycia, juty dają normalny kolor lub jeden kolor, a nie mieszany gradientowo.

fun checkAPI_N(): Boolean {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N)
            return true
        else
            return false
    }

podaj identyfikator swoim linearlayoutom i ustaw tło, jeśli jest w porządku

 if(UtilKotlin.checkAPI_N()){
            linlay_act_menu_container.setBackgroundResource(R.drawable.a_6)
            linlay_act_menu_logo.setBackgroundResource(R.drawable.as_strain)
        }else {//todo normal color background setting}

0

W moim przypadku muszę podać pełną nazwę pakietu komponentu interfejsu użytkownika biblioteki, którego używam w moim pliku układu.


0

U mnie stało się tak, ponieważ próbowałem mieszać obrazy grafiki wektorowej xml ze zwykłym png w tym samym pliku układu,

dopiero po zastąpieniu grafiki wektorowej xml plikami png zaczęło działać


0
  • Po prostu rozwiązuję ten problem, po prostu usuwam twoje obrazy z do rysowania (v24) i po prostu wklejam je do folderu do rysowania, który działa dla mnie.


0

Miałem ten sam błąd w Crashlytics z dziwnego urządzenia: Motorola One Vision Android 5.1 i 20 GB (darmowej) pamięci RAM, zrootowana To urządzenie jest pierwotnie dostarczane z Androidem 9.0, 4 GB RAM

Prawdopodobnie ktoś próbuje zhakować aplikację, którą obecnie tworzę, i ma problemy z obsługą wielu plików APK. Nie można więc znaleźć elementów do rysowania, a aplikacja powoduje awarię

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.