Eu tenho um módulo de código que implementa viewpager com gaveta de navegação, no entanto, quando executo o código, recebo o seguinte erro
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)
aponta para esta linha
// enabling action bar app icon and behaving it as a toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
código inteiro http://pastebin.com/u1K72fr7
Meu manifesto
<?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 / ATUALIZAR:
O que eu aprendi com isso
Sempre que tal erro ocorre
1. Verifique que tipo de Activity está sendo usado, é uma simples atividade android.app ou AppCompatActivity ou ActionBarActivity e assim por diante.
2. Verifique se o seu tipo de atividade estendida se enquadra na categoria de compatibilidade
exemplo de atividade / fragmento baseado em android.app não são tipos appCompat, enquanto android.support.v4.app.Fragment ou android.support.v4.app.ActivityCompat são baseados em appCompat
se cair em appCompat, usamos getSupportActionBar (), caso contrário, para tipos de android.app podemos usar getActionBar ()
3. Verifique o tema aplicado à atividade em questão no arquivo de manifesto
exemplo: No arquivo de manifesto, se o tema aplicado for, digamos, android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () funcionará
mas se o tema aplicado para a atividade no manifesto for o seguinte android: theme = "@ style / Theme.AppCompat.Light", você terá que usar getSupportActionBar ()
getSupportActionbar()
?supportActionBar
(não nulo) com o seu tema. Você substituiu tudogetActionBar
porgetSupportActionBar
? Mais 1 coisa, você deve atualizar seu novo log de erros.getActionBar()
no seuMainActivity
... Verifique e mude paragetSupportActionBar
.Respostas:
Seu código está gerando
com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
:O problema é muito simples - você
Activity
está herdando do novoandroid.support.v7.app.ActionBarActivity
. Você deve usar uma chamada para emgetSupportActionBar()
vez degetActionBar()
.Se você olhar acima da linha 65 do seu código, verá que já está fazendo isso:
E então, mais abaixo em torno da linha 87, parece que você descobriu o mesmo:
Observe como você comentou
getActionBar()
.fonte
android.support.v7.app.ActionBarActivity
foi substituído porandroid.support.v7.app.AppCompatActivity
. Mas o problema é o mesmo.Se alguém quiser usar android.app.ActionBar e android.app.Activity, você deve alterar o tema do aplicativo em styles.xml , por exemplo:
O problema é que você pode estar usando um tema AppCompat .
Por outro lado, se você deseja usar android.support.v7.app.ActionBar e estende sua atividade com AppCompatActivity , você deve usar um tema AppCompat para evitar esse problema, por exemplo:
Espero que isto ajude.
fonte
AppCompatActivity
vez deActivity
, como nesta resposta .quando você estende appcompatActivity , use
e quando você estender ActionBar , use
não se esqueça de chamar esta função no oncreate após inicializar a barra de ferramentas / barra de ação
fonte
Acho que o que você quer fazer é lançar getActivity (). Por exemplo:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Isso é o que você precisa fazer com as novas bibliotecas de suporte. AppCompatActivity substituiu ActionBarActivity.
fonte
Tente verificar aqui
res >> valores >> styles.xml
certifique-se de que não há nenhum código como este
se houver código como esse, você pode desabilitar por um tempo ou apagá-lo
fonte
<item name="windowNoTitle">true</item>
, que teve que ser removido.android:theme="@style/AppTheme.NoActionBar"
da<avticity>
tag do AndroidManifest.xmlQuando usar AppCompatActivity deve chamar
Antes
getSupportActionBar()
fonte
O botão para cima geralmente é ativado para atividades de baixo nível. No seu manifesto, vejo apenas a MainActivity. Não acho que faça sentido ativar o botão para cima para a atividade principal. Crie uma atividade e, em seguida, no manifesto, adicione o atributo parentActivityName. Em seguida, ative o botão para cima no método onCreate da atividade.
Isso deve ajudar.
https://developer.android.com/training/appbar/up-action.html
fonte
No meu caso, é por causa de
styles.xml
definir o tema pai errado, ou seja, o tema,NoActionBar
claro,getSupportActionbar()
é nulo:Alterado para outra coisa consertada:
fonte
Tente isto espero que funcione, meu código está funcionando bem
fonte
nesta linha em sua atividade:
usa isto:
*
é sua atividadefonte
No meu caso, tive o mesmo erro, mas meu erro foi não ter declarado minha barra de ferramentas.
Portanto, antes de usar getSupportActionBar, tive que encontrar minha barra de ferramentas e definir a actionBar
fonte
Eu sei que essa pergunta é algo antigo. Mas isso pode ajudar muitos que apresentam esse problema.
Para resolver este problema, verifique se existe um ponto de nulidade. Em seguida, aplique a configuração correspondente:
fonte
Se você estiver usando android.app.ActionBar e android.app.Activity, você deve alterar o tema do aplicativo na tag do aplicativo:
fonte
Se você encontrar este erro
Apenas use
fonte
Para qualquer outra pessoa que tenha uma BaseActivity e um filho que se estenda a partir dela, certifique-se de que super.onCreate () seja chamado antes de fazer qualquer coisa. A antiga Activity funcionaria se você chamasse super.onCreate () depois.
Criança estende atividade - pode ligar para super depois que você fizer alguma coisa
Child estende AppCompatActivity - você tem que chamar super primeiro
fonte
Para aqueles que ainda têm esse problema, meu problema foi resolvido no arquivo AndroidManifest.xml. Onde está escrito
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar">
, você precisa removerNoActionBar
, fazendo isso<activity android:name=".MainActivity" android:theme="@style/AppTheme">
, porque com NoActionBar definido o aplicativo não sabe se quer ou não uma barra de ação quando você chama uma dentro de MainActivity.javafonte
Recebi o mesmo erro uma vez, criei um modelo para uma barra de ferramentas padrão (toolbar.xml) e, em outra visualização, criei uma barra de ferramentas que pode ser recolhida.
Eu pedi para adicionar a barra de ferramentas recolhível a uma visualização que mostrasse algumas informações do usuário (como o whatsapp), mas o método findViewById estava fazendo referência à barra de ferramentas padrão (barra de ferramentas id), não à que pode ser recolhida (barra de ferramentas id também) sim, eu escrevi a mesma id para ambas as barras de ferramentas, então quando tentei acessar a atividade o aplicativo travou mostrando o erro.
Corrigi o erro alterando o id da barra de ferramentas recolhível para id: col_toolbar e o erro desapareceu e meu aplicativo funcionou perfeitamente
fonte
Você deveria tentar este. Eu acho que vai funcionar.
fonte
A melhor solução é fazer isso em seu método Oncreate
seguido por uma nova classe
fonte
Por favor, adicione depois
Toolbar
fonte
Sou novo no desenvolvimento de aplicativos Android. Enfrentei esse erro e passei quase 5 horas tentando consertá-lo. Por fim, descobri que a causa raiz desse problema era o seguinte e, se alguém enfrentar esse problema novamente no futuro, leia.
Eu estava tentando criar uma atividade doméstica com fundo de vídeo, para a qual tive que alterar o tema pai da configuração padrão de
Theme.AppCompat.Light.DarkActionBar
paraTheme.AppCompat.Light.NoActionBar
. Isso funcionou bem para a atividade inicial, mas quando eu defini um novo botão com um onclicklistener para navegar para outra atividade, onde eu havia definido um texto personalizado para a barra de ação, esse erro é lançado.Então, o que acabei fazendo foi criar dois temas e atribuí-los às atividades a seguir.
Fiz as seguintes alterações para corrigir o erro.
Definindo os temas em styles.xml
Associando as atividades aos seus respectivos temas em
AndroidManifest.xml
fonte
Sempre que tal erro ocorrer. Tente verificar o seguinte
Verifique que tipo de Activity está sendo usado, é uma simples atividade android.app ou AppCompatActivity ou ActionBarActivity e assim por diante.
Verifique se o seu tipo de atividade estendida se enquadra na categoria de compatibilidade
exemplo de atividade / fragmento baseado em android.app não são tipos appCompat, enquanto android.support.v4.app.Fragment ou android.support.v4.app.ActivityCompat são baseados em appCompat
se cair em appCompat, usamos getSupportActionBar (), caso contrário, para tipos de android.app podemos usar getActionBar ()
exemplo: No arquivo de manifesto, se o tema aplicado for, digamos, android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () funcionará
mas se o tema aplicado para a atividade no manifesto for o seguinte android: theme = "@ style / Theme.AppCompat.Light", você terá que usar getSupportActionBar ()
fonte
se você criou uma nova barra de ferramentas, verifique se você aplicou o método setSupportActionBar (); irá definitivamente ajudá-lo
fonte
Tente fazer isso:
Em vez disso:
fonte
getSupportActionBar()
se já tem seu resultado emactionBar
variável? Ambas as variantes são ruins.