Tengo un módulo de código que implementa viewpager con cajón de navegación, sin embargo, cuando ejecuto el código, aparece el siguiente error
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)
apunta a esta línea
// enabling action bar app icon and behaving it as a toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
código completo http://pastebin.com/u1K72fr7
Mi manifiesto
<?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"
código http://pastebin.com/EFQLzRej
================================================ ================ EDITAR / ACTUALIZAR:
Lo que aprendí de esto
Siempre que ocurra tal error
1. Compruebe qué tipo de actividad se está utilizando, si es una actividad simple de android.app o una AppCompatActivity o una ActionBarActivity y así sucesivamente.
2. Compruebe si el tipo de actividad que se extiende se incluye en la categoría de compatibilidad.
Ejemplo de actividad / fragmento basado en android.app no son tipos de appCompat, mientras que android.support.v4.app.Fragment o android.support.v4.app.ActivityCompat están basados en appCompat
si cae bajo appCompat usamos getSupportActionBar () de lo contrario para los tipos de android.app podemos usar getActionBar ()
3. Verifique el tema aplicado a la actividad en cuestión en el archivo de manifiesto.
ejemplo: en el archivo de manifiesto, si el tema aplicado es, diga android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () funcionará
pero si el tema aplicado para la actividad en el manifiesto es el siguiente android: theme = "@ style / Theme.AppCompat.Light", entonces debe usar getSupportActionBar ()
getSupportActionbar()
?supportActionBar
(no nulo) con tu tema. ¿Reemplazó todogetActionBar
congetSupportActionBar
? Una cosa más, debería actualizar su nuevo registro de errores.getActionBar()
en tuMainActivity
... Compruébalo y cámbiate agetSupportActionBar
.Respuestas:
Tu código está lanzando
com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
:El problema es bastante simple:
Activity
está heredando de lo nuevoandroid.support.v7.app.ActionBarActivity
. Deberías usar una llamada a engetSupportActionBar()
lugar degetActionBar()
.Si mira arriba alrededor de la línea 65 de su código, verá que ya lo está haciendo:
Y luego más abajo alrededor de la línea 87, parece que descubrió lo mismo:
Fíjate cómo comentaste
getActionBar()
.fuente
android.support.v7.app.ActionBarActivity
se ha desaprobado a favor deandroid.support.v7.app.AppCompatActivity
. Pero el problema es el mismo.Si alguien quiere usar android.app.ActionBar y android.app.Activity , debe cambiar el tema de la aplicación en styles.xml , por ejemplo:
El problema es que podría estar usando un tema de AppCompat .
Por otro lado, si desea usar android.support.v7.app.ActionBar y extiende su actividad con AppCompatActivity, entonces debe usar un tema de AppCompat para evitar este problema, por ejemplo:
Espero que esto ayude.
fuente
AppCompatActivity
lugar deActivity
, como en esta respuesta .cuando extiendes appcompatActivity , usa
y cuando extiendes ActionBar , usa
no olvide llamar a esta función en una creación después de inicializar la barra de herramientas / barra de acciones
fuente
Creo que lo que quieres hacer es lanzar getActivity (). Por ejemplo:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Esto es lo que debe hacer con las nuevas bibliotecas de soporte. AppCompatActivity ha reemplazado a ActionBarActivity.
fuente
Intenta comprobar aquí
res >> valores >> styles.xml
asegúrese de que no haya un código como este
si hay un código como ese, puede deshabilitarlo por un tiempo o borrarlo
fuente
<item name="windowNoTitle">true</item>
, que tuvo que ser removido.android:theme="@style/AppTheme.NoActionBar"
de la<avticity>
etiqueta en AndroidManifest.xmlCuando use AppCompatActivity debe llamar
antes de
getSupportActionBar()
fuente
El botón Arriba generalmente se activa para actividades de bajo nivel. En su manifiesto, solo veo MainActivity. No creo que tenga sentido activar el botón de arriba para la actividad principal. Cree una actividad, luego en el manifiesto agregue el atributo parentActivityName. Luego, active el botón arriba en el método onCreate de la actividad.
Esto debería ayudar.
https://developer.android.com/training/appbar/up-action.html
fuente
En mi caso, se debe a que
styles.xml
configuré el tema principal incorrecto, es decir, el tema,NoActionBar
por supuesto,getSupportActionbar()
es nulo:Lo cambié por algo más lo solucionó:
fuente
Prueba esto espero que funcione, mi código funciona bien
fuente
en esta línea de tu actividad:
utilizar este:
*
es tu actividadfuente
En mi caso tuve el mismo error, pero mi error fue que no declaré mi barra Google.
Entonces, antes de usar getSupportActionBar, tuve que encontrar mi barra de herramientas y configurar la barra de acción
fuente
Sé que esta pregunta es algo antigua. Pero esto puede ayudar a muchos que presentan este problema.
Para solucionar este problema, compruebe si existe un punto de nulidad. Luego aplique la configuración correspondiente:
fuente
Si está utilizando android.app.ActionBar y android.app.Activity, debe cambiar el tema de la aplicación en la etiqueta de la aplicación:
fuente
Si encuentra este error
Solo usa
fuente
Para cualquier otra persona que tenga una BaseActivity, y un hijo que se extienda a partir de ella, asegúrese de que se llame primero a super.onCreate () antes de hacer cualquier cosa. La actividad anterior funcionaría si llamaras a super.onCreate () después.
El niño extiende la actividad: podría llamar súper después de que hicieras cosas
El niño extiende AppCompatActivity: primero debes llamar a Super
fuente
Para aquellos que todavía tienen este problema, mi problema se resolvió en el archivo AndroidManifest.xml. Donde dice
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar">
, debe eliminarloNoActionBar
, hacerlo<activity android:name=".MainActivity" android:theme="@style/AppTheme">
, porque con NoActionBar configurado, la aplicación no sabe si quiere o no una barra de acción cuando llama a una dentro de MainActivity.javafuente
Recibí el mismo error una vez, creé una plantilla para una barra de herramientas predeterminada (toolbar.xml) y luego, en otra vista, creé una barra de herramientas plegable.
Necesitaba agregar la barra de herramientas plegable a una vista que muestra cierta información del usuario (como whatsapp), pero el método findViewById hacía referencia a la barra de herramientas predeterminada (barra de herramientas de identificación), no a la barra de herramientas plegable (barra de herramientas de identificación también) sí, escribí la misma identificación en ambas barras de herramientas, así que cuando intenté acceder a la actividad, la aplicación se bloqueó y me mostró el error.
Solucioné el error cambiando la identificación de la barra de herramientas plegable a id: col_toolbar y el error desapareció y mi aplicación funcionó perfectamente
fuente
Deberías probar este. Creo que funcionará.
fuente
La mejor solución haz esto en tu método Oncreate
seguido de una nueva clase
fuente
Por favor agregue después
Toolbar
fuente
Soy nuevo en el desarrollo de aplicaciones de Android. Me enfrenté a este error y pasé casi 5 horas tratando de solucionarlo. Finalmente, descubrí que lo siguiente era la causa principal de este problema y si alguien enfrenta este problema nuevamente en el futuro, por favor lea esto.
Estaba intentando crear una actividad en el hogar con un fondo de video, para lo cual tuve que cambiar el tema principal de la configuración predeterminada de
Theme.AppCompat.Light.DarkActionBar
aTheme.AppCompat.Light.NoActionBar
. Esto funcionó bien para la actividad de inicio, pero cuando configuro un nuevo botón con un escuchador de clics para navegar a otra actividad, donde había configurado un texto personalizado en la barra de acción, aparece este error.Entonces, lo que terminé haciendo fue crear dos temas y asignarlos a las actividades de la siguiente manera.
He realizado los siguientes cambios para corregir el error.
Definiendo los temas en styles.xml
Asociar las actividades a sus respectivos temas en
AndroidManifest.xml
fuente
Siempre que ocurra tal error. Intenta comprobar lo siguiente
Compruebe qué tipo de actividad se está utilizando, si es una actividad simple de android.app o una AppCompatActivity o ActionBarActivity y así sucesivamente.
Verifique si su tipo de actividad que se extiende cae dentro de la categoría de compatibilidad
Ejemplo de actividad / fragmento basado en android.app no son tipos de appCompat, mientras que android.support.v4.app.Fragment o android.support.v4.app.ActivityCompat están basados en appCompat
si cae bajo appCompat usamos getSupportActionBar () de lo contrario para los tipos de android.app podemos usar getActionBar ()
ejemplo: en el archivo de manifiesto, si el tema aplicado es, diga android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () funcionará
pero si el tema aplicado para la actividad en el manifiesto es el siguiente android: theme = "@ style / Theme.AppCompat.Light", entonces debe usar getSupportActionBar ()
fuente
si ha creado una nueva barra de herramientas, entonces aplique compruebe que ha aplicado el método setSupportActionBar (); definitivamente te ayudará
fuente
Intente hacer esto:
En lugar de esto:
fuente
getSupportActionBar()
si ya tiene su resultado enactionBar
variable? Ambas variantes son malas.