Saya memiliki modul kode yang mengimplementasikan viewpager dengan panel navigasi, namun, ketika saya menjalankan kode, saya mendapatkan kesalahan berikut
01-26 09:20:02.958: D/AndroidRuntime(18779): Shutting down VM
01-26 09:20:02.959: E/AndroidRuntime(18779): FATAL EXCEPTION: main
01-26 09:20:02.959: E/AndroidRuntime(18779): Process: com.example.tabwithslidingdrawer, PID: 18779
01-26 09:20:02.959: E/AndroidRuntime(18779): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tabwithslidingdrawer/com.example.tabwithslidingdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.access$800(ActivityThread.java:148)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Handler.dispatchMessage(Handler.java:102)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Looper.loop(Looper.java:135)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.main(ActivityThread.java:5312)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Native Method)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Method.java:372)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
01-26 09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Activity.performCreate(Activity.java:5953)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
01-26 09:20:02.959: E/AndroidRuntime(18779): ... 10 more
09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference 01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
menunjuk ke baris ini
// enabling action bar app icon and behaving it as a toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
seluruh kode http://pastebin.com/u1K72fr7
Manifest saya
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tabwithslidingdrawer"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Tabwithpager" >
<activity
android:name="com.example.tabwithslidingdrawer.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android: theme = "@ style / Theme.Tabwithpager"
kode http://pastebin.com/EFQLzRej
================================================== ================ EDIT / UPDATE:
Apa yang saya pelajari dari ini
Kapanpun kesalahan seperti itu terjadi
1. Periksa jenis Aktivitas yang digunakan, apakah itu Aktivitas android.app sederhana atau AppCompatActivity atau ActionBarActivity dan sebagainya.
2. Periksa apakah jenis aktivitas Anda yang diperpanjang termasuk dalam kategori compat
Contoh Activity / Fragment berbasis android.app adalah jenis non appCompat, sedangkan android.support.v4.app.Fragment atau android.support.v4.app.ActivityCompat adalah jenis
jika berada di bawah appCompat kita menggunakan getSupportActionBar () lain untuk tipe android.app kita bisa menggunakan getActionBar ()
3. Periksa tema yang diterapkan ke aktivitas yang dimaksud di file manifes
contoh: Dalam file manifes, jika tema diterapkan, katakanlah android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () akan berfungsi
tetapi jika tema yang diterapkan untuk aktivitas dalam manifes adalah sebagai berikut android: theme = "@ style / Theme.AppCompat.Light" maka Anda harus menggunakan getSupportActionBar ()
getSupportActionbar()
?supportActionBar
(bukan null) dengan tema Anda. Apakah Anda mengganti semuanyagetActionBar
dengangetSupportActionBar
? 1 hal lagi, Anda harus memperbarui log kesalahan baru Anda.getActionBar()
diMainActivity
... Periksa dan ubah kegetSupportActionBar
.Jawaban:
Kode Anda membuang
com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
:Masalahnya cukup sederhana - Anda
Activity
mewarisi dari yang baruandroid.support.v7.app.ActionBarActivity
. Anda harus menggunakan panggilan kegetSupportActionBar()
alih-alihgetActionBar()
.Jika Anda melihat di atas sekitar baris 65 kode Anda, Anda akan melihat bahwa Anda sudah melakukannya:
Dan kemudian turunkan di sekitar baris 87 sepertinya Anda menemukan hal yang sama:
Perhatikan bagaimana Anda berkomentar
getActionBar()
.sumber
android.support.v7.app.ActionBarActivity
sudah tidak digunakan lagi karena mendukungandroid.support.v7.app.AppCompatActivity
. Tapi masalahnya sama.Jika ada yang ingin menggunakan android.app.ActionBar dan android.app.Activity Anda harus mengubah tema aplikasi di styles.xml , misalnya:
Masalahnya adalah Anda mungkin menggunakan tema AppCompat .
Di sisi lain, jika Anda ingin menggunakan android.support.v7.app.ActionBar dan memperluas aktivitas Anda dengan AppCompatActivity, Anda harus menggunakan tema AppCompat untuk menghindari masalah ini, misalnya:
Semoga ini membantu.
sumber
AppCompatActivity
bukanActivity
, seperti dalam jawaban ini .saat Anda memperluas appcompatActivity lalu gunakan
dan ketika Anda memperluas ActionBar lalu gunakan
jangan lupa untuk memanggil fungsi ini di oncreate setelah menginisialisasi toolbar / actionbar
sumber
Saya pikir yang ingin Anda lakukan adalah cast getActivity (). Sebagai contoh:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Inilah yang perlu Anda lakukan dengan pustaka dukungan baru. AppCompatActivity telah menggantikan ActionBarActivity.
sumber
Coba cek disini
res >> nilai >> styles.xml
pastikan tidak ada kode seperti ini
jika ada kode seperti itu, Anda bisa menonaktifkannya sebentar, atau menghapusnya
sumber
<item name="windowNoTitle">true</item>
, yang harus disingkirkan.android:theme="@style/AppTheme.NoActionBar"
dari<avticity>
tag di AndroidManifest.xmlSaat menggunakan AppCompatActivity harus memanggil
Sebelum
getSupportActionBar()
sumber
Tombol Naik biasanya diaktifkan untuk Aktivitas Tingkat Rendah. Dalam manifes Anda, saya hanya melihat MainActivity. Saya rasa tidak masuk akal untuk mengaktifkan tombol atas untuk aktivitas utama. Buat aktivitas, lalu di manifes tambahkan atribut parentActivityName. Kemudian aktifkan tombol naik pada metode onCreate aktivitas.
Ini akan membantu.
https://developer.android.com/training/appbar/up-action.html
sumber
Dalam kasus saya adalah karena
styles.xml
mengatur tema induk yang salah, yaituNoActionBar
tema tentu sajagetSupportActionbar()
adalah null:Mengubahnya menjadi sesuatu yang lain memperbaikinya:
sumber
Coba ini semoga berhasil, kode saya berfungsi dengan baik
sumber
di baris ini dalam aktivitas Anda:
Gunakan ini:
*
adalah aktivitas Andasumber
Dalam kasus saya, saya mengalami kesalahan yang sama tetapi kesalahan saya adalah saya tidak mendeklarasikan Toolbar saya.
Jadi, sebelum saya menggunakan getSupportActionBar, saya harus menemukan toolbar saya dan menyetel actionBar
sumber
Saya tahu bahwa pertanyaan ini adalah sesuatu yang kuno. Tapi ini bisa membantu banyak orang yang menghadapi masalah ini.
Untuk mengatasi masalah ini, periksa apakah ada titik nulitas. Kemudian terapkan konfigurasi yang sesuai:
sumber
Jika Anda menggunakan android.app.ActionBar dan android.app.Activity Anda harus mengubah tema aplikasi dalam tag aplikasi:
sumber
Jika Anda mengalami kesalahan ini
Gunakan saja
sumber
Untuk siapa pun yang memiliki BaseActivity, dan anak yang diturunkan darinya, pastikan super.onCreate () dipanggil terlebih dahulu sebelum Anda melakukan apa pun. Aktivitas lama akan berfungsi jika Anda memanggil super.onCreate () sesudahnya.
Child extends Activity - bisa menelepon super setelah Anda melakukan sesuatu
Anak memperluas AppCompatActivity - Anda harus memanggil super terlebih dahulu
sumber
Bagi mereka yang masih mengalami masalah ini, masalah saya telah diselesaikan di file AndroidManifest.xml. Dimana dikatakan
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar">
, Anda perlu menghapusNoActionBar
, membuatnya<activity android:name=".MainActivity" android:theme="@style/AppTheme">
, karena dengan NoActionBar mengatur aplikasi tidak tahu apakah ia menginginkan bilah tindakan atau tidak saat Anda memanggilnya di dalam MainActivity.javasumber
Saya mendapat kesalahan yang sama sekali, saya membuat template untuk toolbar default (toolbar.xml) dan kemudian di tampilan lain saya membuat toolbar collapsable.
Saya perlu menambahkan toolbar yang dapat diciutkan ke tampilan yang menampilkan beberapa informasi pengguna (seperti whatsapp), tetapi metode findViewById merujuk pada toolbar default (toolbar id), bukan yang dapat diciutkan (toolbar id juga) ya, saya tulis id yang sama untuk kedua toolbar, jadi ketika saya mencoba mengakses aktivitas aplikasi crash menunjukkan saya kesalahan.
Saya memperbaiki kesalahan dengan mengubah id dari toolbar yang dapat diciutkan menjadi id: col_toolbar dan kesalahan hilang dan aplikasi saya bekerja dengan sempurna
sumber
Anda harus mencoba yang ini. Saya pikir itu akan berhasil.
sumber
Solusi terbaik lakukan ini dalam metode Oncreate Anda
diikuti oleh kelas baru
sumber
Harap tambahkan setelah
Toolbar
sumber
Saya baru dalam pengembangan Aplikasi Android. Saya menghadapi kesalahan ini dan menghabiskan hampir 5 jam mencoba memperbaikinya. Akhirnya, saya menemukan berikut ini adalah akar penyebab masalah ini dan jika ada yang menghadapi masalah ini lagi di masa mendatang, tolong baca ini.
Saya mencoba membuat Home Activitiy dengan Video Background, yang mana saya harus mengubah tema induk dari pengaturan default
Theme.AppCompat.Light.DarkActionBar
menjadiTheme.AppCompat.Light.NoActionBar
. Ini berfungsi dengan baik untuk Aktivitas Rumah, tetapi ketika saya menyetel tombol baru dengan onclicklistener untuk menavigasi ke Aktivitas lain, di mana saya telah menyetel teks khusus ke Bilah Tindakan, kesalahan ini muncul.Jadi, yang akhirnya saya lakukan adalah membuat dua tema dan menugaskannya ke kegiatan sebagai berikut.
Saya telah melakukan perubahan berikut untuk memperbaiki kesalahan tersebut.
Mendefinisikan tema dalam styles.xml
Mengaitkan Aktivitas dengan Tema Masing-masing di
AndroidManifest.xml
sumber
Kapanpun kesalahan seperti itu terjadi. Coba periksa Hal-hal Berikut
Periksa jenis Aktivitas yang digunakan, apakah itu Aktivitas android.app sederhana atau AppCompatActivity atau ActionBarActivity dan sebagainya.
Periksa apakah jenis aktivitas Anda yang diperpanjang termasuk dalam kategori compat
Contoh Activity / Fragment berbasis android.app adalah jenis non appCompat, sedangkan android.support.v4.app.Fragment atau android.support.v4.app.ActivityCompat adalah jenis
jika berada di bawah appCompat kita menggunakan getSupportActionBar () lain untuk tipe android.app kita bisa menggunakan getActionBar ()
contoh: Dalam file manifes, jika tema diterapkan, katakanlah android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () akan berfungsi
tetapi jika tema yang diterapkan untuk aktivitas dalam manifes adalah sebagai berikut android: theme = "@ style / Theme.AppCompat.Light" maka Anda harus menggunakan getSupportActionBar ()
sumber
jika Anda telah membuat toolbar baru kemudian terapkan periksa bahwa Anda telah menerapkan metode setSupportActionBar (); itu pasti akan membantu Anda
sumber
Coba lakukan ini:
Dari pada ini:
sumber
getSupportActionBar()
jika Anda sudah mendapatkan hasilnya dalamactionBar
variabel? Kedua varian itu buruk.