android.view.InflateException: Baris file XML biner # 12: Kesalahan menggembungkan kelas <unknown>

147

Saya menerima banyak kesalahan yang ditampilkan di Subjek. Kesalahan ini tampaknya sesekali dan saya tidak dapat mereproduksi mereka. Dari tumpukan saya dapat belajar bahwa kesalahan tersebut dapat terjadi untuk sumber daya tata letak yang berbeda. Garis XML juga bervariasi.

Adakah yang bisa menjelaskan mengapa kesalahan ini terjadi? Dan apa yang bisa saya lakukan untuk memperbaiki masalah ini?

Tumpukan

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

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)

Berikut ini adalah hasil dari XML, namun kesalahan seperti itu terjadi di xml lain

<?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>
Solvek
sumber
periksa ini. ini membantu saya! stackoverflow.com/questions/9480972/android-tablelayout-error
user1974235

Jawaban:

266

Pengecualian mengembang sebenarnya bukan masalah, tetapi benar-benar berasal dari masalah lain yang lebih dalam tata letak Anda yang kemudian dibungkus dalam InflateException. Masalah umum adalah pengecualian kehabisan memori ketika mencoba mengembang tampilan gambar memuat sumber daya yang dapat ditarik. Jika salah satu sumber daya ini memiliki resolusi piksel tinggi, itu akan memakan banyak memori, yang menyebabkan perkecualian.

Jadi pada dasarnya verifikasi bahwa resolusi piksel dalam gambar yang dapat digambar Anda hanya minimum yang diperlukan untuk tata letak Anda.

vnportnoy
sumber
4
@vnportnoy Saya juga memiliki kesalahan yang sama ketika saya menghapus gambar
Harin Kaklotar
4
Saya yakin saya tidak punya drawable dalam aplikasi saya
Arturas M
3
Coba periksa bundel bahasa Anda, mungkin sumber string tidak ada. Ini menyebabkan masalah dalam kasus saya.
Mohammed Subhi Sheikh Quroush
Jika masalah Anda adalah dengan tes instrumentasi, maka coba ini: stackoverflow.com/q/24904445
Jerry Destremps
Setelah menghapus imageview dari xml saya masih kesalahan terjadi di classpath 'com.android.tools.build:gradle:3.0.0-alpha2' dan kompilasi 'com.android.support.constraint: constraint-layout: 1.0.2'
Subho
24

ViewFlippermemuat semua gambar ke dalam memori selama tata letak menggembung. Karena gambar saya besar butuh banyak memori, saya diganti ViewFlipperdengan ImageSwitcheryang dapat mengubah gambar dengan animasi seperti ViewFlippertetapi hanya memuat satu gambar pada saat itu.

Solvek
sumber
23

Ini juga dapat terjadi jika Anda menggunakan VectorDrawabledukungan perpustakaan menggunakan dan lupa untuk menggunakan app:srcCompatbukanandroid:src

Kesalahan yang tepat adalah: Baris file XML biner #XX: Galat menggembungkan ImageView kelas

Lihat tautan itu

lujop
sumber
Setelah Anda mengaktifkannya, Anda harus selalu menggunakan aplikasi: srcCompat
Mohamed ALOUANE
Tetapi ini tidak akan menghasilkan crash acak.
Menna-Allah Sami
11

Saya memiliki kesalahan yang sama ketika membuat tampilan khusus dengan hanya satu konstruktor, cobalah untuk mendefinisikan semua konstruktor untuk tampilan kustom Anda.

   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();
    }
Wildan Muhlis
sumber
11

Saya tahu pertanyaannya sudah dijawab tetapi saya masih memposting dengan pemikiran bahwa mungkin seseorang mengalami masalah seperti ini.

Dalam masalah kasus saya adalah saya memuat aplikasi saya ke ponsel yang merujuk tata letak dari res / layout / folder dan nilai-nilai untuk @dimens dari res / values ​​/ dimens di sini itu font_22 yang ia coba akses dan ia tetapkan dalam res / values-xlarge / dimens.

Saya sebenarnya sedang memperbarui UI proyek yang ada.

Saya mengalami masalah ini karena saya menggunakan IDE Eclipse di mana saya ctrl + ruang untuk petunjuk saat menulis xml untuk folder tata letak itu menampilkan semua nilai dari nilai-nilai serta folder nilai-xlarge terlepas dari folder mana yang saya tulis.

Saya juga tahu bahwa nilai di kedua file harus sama dengan yang dipetakan untuk layar yang berbeda.

Semoga ini bisa membantu seseorang mengalami masalah konyol semacam ini.

MobileEvangelist
sumber
9

Saya menemukan bug yang sama dan menemukan alasan dasarnya adalah:

Gunakan Konteks Aplikasi untuk mengembang tampilan.

Menggembungkan dengan Konteks Aktivitas memperbaiki bug.

pengemudi
sumber
6

Ukuran gambar saya hanya 14Kb tetapi masalahnya adalah desainer memberi saya 1011px x 1819px (resolusi terlalu tinggi sehingga menyebabkan InflateException)

Han Heong Ho
sumber
6

Jika seseorang mengalami masalah serupa, saya mengalami masalah seperti itu saat menggembungkan tampilan:

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

diperbaiki dengan mengganti getApplicationContext()denganthis

hedisam
sumber
5

Saya mengalami kesalahan ini karena saya memilih tema sebagai tema Material. Tetapi ketika saya mencoba menjalankan aplikasi pada 4.4.2 itu memberikan kesalahan ini.

Solusi: Pilih Theme_holo sebagai tema

Lakhwinder Singh Dhillon
sumber
Masalah saya mungkin mirip dengan Anda karena saya hanya melihat crash 4.2.2. Tapi di mana saya bisa berubah dari tema Material ke Theme_holo? Saya tidak melihat Materi kata kunci di styles.xmlatau v21/styles.xml. Lihat pertanyaan saya: stackoverflow.com/questions/37883677/…
Katedral Pillon
4

Tautan ini dapat membantu Anda. Coba periksa manifes Anda untuk masalah. Jika Anda dapat membuatnya terjadi lagi, poskan seluruh jejak tumpukan Anda sehingga kami dapat melihat apa kesalahan sebenarnya.

EDIT: Saya yakin Anda telah memeriksa ini, tetapi apa yang ada di baris 12 dari file XML yang Anda gunakan untuk tata letak TourActivity?

Kevin Coppock
sumber
Saya telah membaca masalah ini. Ini bukan kasus saya (setidaknya saya tidak bisa melihatnya). Menambahkan tumpukan ke pertanyaan.
Solvek
Jawaban yang diperbarui, dapatkah Anda memposting XML? Jika Anda tidak keberatan, poskan keseluruhan XML jika tidak terlalu besar.
Kevin Coppock
Menambahkan XML ke pertanyaan awal
Solvek
Hmm, sayangnya saya tidak punya pengalaman menggunakan penggabungan atau ViewFlipper ... Apakah semua file XML yang ini terjadi dengan menggunakan penggabungan atau ViewFlipper?
Kevin Coppock
Tidak. File lain tidak memiliki gabungan sirip tetapi masih memiliki masalah yang sama.
Solvek
4

Bagi saya, pesan kesalahan sebenarnya tidak cukup di log kucing, jadi inilah yang saya lakukan untuk mencari tahu apa yang menyebabkan masalah:

(Dalam pesan kesalahan log cat, katanya kesalahan terjadi saat menggelembungkan tata letak tertentu di HomeFragment.java saya)

  1. Saya meletakkan breakpoint tepat sebelum tata letak meningkat
  2. Saya menjalankan aplikasi dalam mode debug hingga mencapai breakpoint tertentu
  3. Saya memilih baris dengan kursor saya dan berlari Evaluate expressiondi atasnya:
    • Run > Evaluate Expression atau alt - F8
  4. Hasilnya menunjukkan saya lebih banyak informasi tentang sumber masalah, yang dalam kasus saya, adalah file yang dapat digambar menggunakan tools:targetApi="lollipop"(bug hanya terjadi pada perangkat yang lebih tua).
Julian Honma
sumber
Terima kasih! Ini membantu saya menemukan masalahnya!
Sergey Stasishin
4

Saya menemukan kesalahan yang sama, dan butuh dua hari untuk mengidentifikasi kesalahan itu.

Kesalahan itu hanya karena saya mencoba menggunakan: android:background

Daripada: app:srcCompat

dalam file SVG.

Dalam kasusmu, aku yakin ini dia

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

Saya sarankan menggunakannya dengan cara ini

tambahkan ini ke aplikasi build.gradle Anda

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }

dan

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

Saya harap ini membantu.

Williaan Lopes
sumber
3

Saya tahu itu adalah pertanyaan yang dijawab, tetapi saya tidak melihat penyebab yang saya hadapi.

Itu adalah Android Studio menempatkan drawables saya di / drawable-V24 Emulator saya adalah API 23. Jadi, akhirnya tidak dapat menemukannya.

Solusinya adalah memindahkan semua drawables ke / drawable folder (no -24).

juga
sumber
Saya juga punya kasus yang sama.
Rafael
3

Anda harus menyalin file gambar dari folder "drawable-24" ke folder "drawable".

Emre Aydemir
sumber
2

Saya memiliki kesalahan yang sama dan saya memutuskan untuk memindahkan drawables dari folder drawable-mdpi ke drawable folder. Butuh beberapa waktu untuk saya sadari karena di Eclipse semuanya bekerja dengan sempurna ketika di Android Studio saya mendapatkan kesalahan runtime yang jelek ini.

Sunting catatan: Jika Anda bermigrasi dari gerhana ke Android Studio dan proyek Anda berasal dari gerhana itu mungkin terjadi, jadi berhati-hatilah bahwa di Android Studio hal-hal sedikit berbeda dari gerhana.

Menandai
sumber
2

Dalam kasus saya, kesalahan ini terjadi ketika saya menggunakan tombol tindakan Mengambang dan mengatur android:backgroundTint="#000". Maka jangan mengatur backgroundTintdan masalah diselesaikan. Semoga bermanfaat bagi Anda.

Luan Si Ho
sumber
Terima kasih itu memang masalah dalam kasus saya. Perlu digunakan, app:backgroundTintbukan android:backgroundTint.
Drago
2

Bagi saya, masalah saya adalah saya dulu

android:background="?attr/selectableItemBackground"

Untuk latar belakang LinearLayout, setelah saya menghapusnya tes lulus.

Val Okafor
sumber
1

Saya punya masalah ini sekarang dan berhasil mencari tahu apa itu. Merujuk warna pada nilai saya yang menyebabkan masalah. Jadi definisikan secara manual daripada menggunakan satu dari saran dropdown. Lalu itu berhasil!

Jonathan Laliberte
sumber
1

Saya memiliki kesalahan yang sama ketika saya menjalankan aplikasi saya di API lvl 16 (26 baik-baik saja). Itu karena saya digunakan ?attrr/colorAccentdalam bentuk saya yang dapat digambar:

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

Mengganti itu dengan warna biasa memperbaiki masalah saya.

Michał Powłoka
sumber
1

saya memiliki masalah yang sama dan diselesaikan dengan menghapus drawable-v24 dengan (24) di depan gambar di folder drawable dan menggantinya dengan drawables biasa.

nikraftar ghane
sumber
1

Saya tahu utas ini sudah tua, tetapi masih menjawabnya agar tidak ada orang lain yang menghabiskan malam tanpa tidur.

Saya sedang refactoring proyek lama, yang semua file tata letak berisi atribut hardcoded seperti android:maxLength = 500. Jadi saya memutuskan untuk mendaftarkannya di res/dimenfile saya sebagai<dimen name="max_length">500</dimen> .

Selesai refactoring hampir 30 file tata letak dengan nilai res saya. Tebak apa? lain kali saya menjalankan proyek saya itu mulai melempar samaInflateException .

Sebagai solusi, diperlukan untuk mengulang semua perubahan saya dan menjaga semua nilai tersebut sama seperti sebelumnya.

TLDR;

langkah 1: Semua berjalan baik.

langkah 2: Untuk meningkatkan pemeliharaan saya saya ganti android:maxLength = 500dengan <dimen name="max_length">500</dimen>dan android:maxLength = @dimen/max_length, di situlah semuanya salah (menabrakInflateException ).

langkah 3: Semua berjalan buruk

Langkah 4: Re-melakukan semua pekerjaan saya dengan kembali mengganti android:maxLength = @dimen/max_lengthdenganandroid:maxLength = 500 .everything bisa tetap.

langkah 5: Semua berjalan baik.

iCantC
sumber
1

Mengatasinya dengan memindahkan semua item yang dapat saya gambar dari drawable-v24 ke drawable

Eben
sumber
0

Saya juga menghadapi masalah serupa. Sementara bagi siapa pun, ini mungkin masalah berbagai penggunaan buruk dalam Kode seperti

  1. Tag Tata Letak salah dalam XML
  2. Memuat sumber daya berat langsung ke ImageView menghasilkan OOM
  3. Masalah dengan penggunaan gaya.

Salah satu faktor yang paling diabaikan adalah penggunaan Konteks yang benar saat menggembungkan tampilan. Harap periksa bahwa Anda tidak menggunakan ApplicationContext di mana konteks aktivitas diperlukan. Meskipun, ApplicationContext mungkin tidak selalu berakhir dengan kesalahan, tetapi tergantung pada hierarki tampilan Anda, itu mungkin sangat penting.

Saya menyelesaikan masalah saya dengan konteks BAD (menggunakan ApplicationContext alih-alih Activity dalam rentang 4 hari! Jadi, cobalah jika itu menyelesaikannya. Selamat Pengodean !!

sud007
sumber
0

Saya telah menghadapi masalah yang sama, saya telah menggunakan tag tampilan di xml bukannya View. Mengganti ke kelas Lihat memperbaiki masalah.

Semoga ini bisa membantu Anda juga ..

Kavya Shravan
sumber
0

Kami perlu memeriksa Versi API. Saya biasa memberi warna latar belakang untuk LinearLayoutsuka saya

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

pasti saya memiliki kesalahan yang sama, as_royalblue.xmldi dalam drawablefolder

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

dan bagaimana saya memperbaikinya , sebenarnya sepertinya masalah Api jadi kita perlu memeriksa tingkat api jika di atas API 24 sehingga kita dapat menggunakan cara yang kita suka. Tetapi jika di bawah 24 kita harus menghindari penggunaan, juts memberikan warna normal atau satu warna tidak satu warna gradasi campuran.

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

berikan id ke linearlayout Anda dan atur latar belakang jika tidak masalah

 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}
Sam
sumber
0

Dalam kasus saya, saya harus menentukan nama paket lengkap komponen UI perpustakaan yang saya gunakan dalam file tata letak saya.

mini christian
sumber
0

Bagi saya itu terjadi karena saya mencoba untuk mencampur gambar grafik vektor xml dengan png biasa dalam file tata letak yang sama,

hanya setelah saya mengganti grafik vektor xml dengan pngs mulai berfungsi

Daniel
sumber
0
  • Saya baru saja menyelesaikan masalah ini, cukup hapus gambar Anda dari drawable (v24) dan cukup tempel di folder drawable ini berfungsi untuk saya.

Muzammil
sumber
0

Saya memiliki kesalahan yang sama dalam Crashlyticsdari perangkat aneh: RAM Motorola One Vision Android 5.1 dan 20 GB (gratis), rooted Perangkat ini awalnya berasal dari Android 9.0, RAM 4 GB

Mungkin seseorang sedang mencoba meretas aplikasi yang saat ini saya kembangkan dan memiliki masalah dalam menangani multi-APK. Jadi gambar tidak dapat ditemukan dan aplikasi memberikan crash

GGK
sumber