Android的错误

我有一个代码模块,实现viewpager与导航抽屉,但是当我运行的代码,我得到以下错误

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):引起:java.lang.NullPointerException:试图调用null对象引用虚拟方法'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)'01-26 09: 20:02.959:E / AndroidRuntime(18779):at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)

指向这一行

 // enabling action bar app icon and behaving it as toggle button getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); 

整个代码http://pastebin.com/u1K72fr7

我的清单

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

机器人:主题= “@风格/ Theme.Tabwithpager”

代码http://pastebin.com/EFQLzRej

================================================== ================ 编辑/更新:

我从中学到了什么

每当发生这样的错误

1.检查正在使用什么样的Activity,是一个简单的android.app Activity还是一个AppCompatActivity或一个ActionBarActivity等等。

2.检查你的活动types是否属于compat类别

例如基于android.app的Activity / Fragment是非appCompattypes,而android.support.v4.app.Fragment或android.support.v4.app.ActivityCompat是基于appCompat

如果它属于appCompat,我们使用getSupportActionBar()else来获取android.apptypes,我们可以使用getActionBar()

3.在清单文件中检查应用于相关活动的主题

例如:在清单文件中,如果应用主题是说android:theme =“@ android:style / Theme.Holo.Dialog”getActionBar()将工作

但如果在清单中的活动应用主题如下android:theme =“@ style / Theme.AppCompat.Light”那么你必须使用getSupportActionBar()

你的代码正在抛出com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)

  // enabling action bar app icon and behaving it as toggle button getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); 

问题很简单 – 你的Activityinheritance自新的android.support.v7.app.ActionBarActivity 。 您应该使用调用getSupportActionBar()而不是getActionBar()

如果你从代码的第65行开始看,你会发现你已经这么做了:

  actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); // TODO: Remove the redundant calls to getSupportActionBar() // and use variable actionBar instead getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); 

然后降低87线左右,你看起来像你一样:

  getSupportActionBar().setTitle( Html.fromHtml("<font color=\"black\">" + mTitle + " - " + menutitles[0] + "</font>")); // getActionBar().setTitle(mTitle +menutitles[0]); 

注意你是如何注释掉getActionBar()

如果有人想要使用android.app.ActionBarandroid.app.Activity,你应该改变styles.xml中的应用主题,例如:

 <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 

问题是你可以使用AppCompat主题。

另一方面,如果您想使用android.support.v7.app.ActionBar,并使用AppCompatActivity扩展活动,则必须使用AppCompat主题来避免此问题,例如:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

希望这可以帮助。

当你扩展appcompatActivity然后使用

 this.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

当你扩展ActionBar然后使用

 this.getActionBar().setDisplayHomeAsUpEnabled(true); 

不要忘了在初始化工具栏/操作栏之后在oncreate中调用这个函数

我想你想要做的就是强制getActivity()。 例如:

((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

这是你需要做的新的支持库。 AppCompatActivity已经取代了ActionBarActivity。

向上button通常为低级活动激活。 在你的清单中,我只看到MainActivity。 我不认为激活主要活动的向上button是有意义的。 创build一个活动,然后在清单中添加parentActivityName属性。 然后激活活动的onCreate方法的向上button。
这应该有所帮助。
https://developer.android.com/training/appbar/up-action.html

尝试在这里检查

res >> values >> styles.xml

确保没有这样的代码

 <item name="windowActionBar">false</item> 

如果有这样的代码,你可以禁用一段时间,或删除它

对于任何具有BaseActivity的人员以及从其中扩展的孩子,请确保在执行任何操作之前先调用super.onCreate()。 如果以后调用super.onCreate(),则旧的Activity将起作用。

孩子延伸活动 – 可以打电话超级你做东西后

 @Override protected void onCreate(Bundle savedInstanceState) { getActionBar().setDisplayHomeAsUpEnabled(true); super.onCreate(savedInstanceState); 

孩子延伸AppCompatActivity – 你必须先超级打电话

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //do this first getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

在我的情况下,我有同样的错误,但我的错误是,我没有申报我的工具栏。

所以,在我使用getSupportActionBar之前,我必须find我的工具栏并设置actionBar

  appbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(appbar); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_nav_menu); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

如果您使用的是android.app.ActionBar和android.app.Activity,则应该在应用程序标签中更改应用程序主题:

<应用程序

android:theme =“@ android:style / Theme.Holo.Light”>

对于那些仍然有这个问题,我的问题在AndroidManifest.xml文件解决。 在哪里说<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar"> ,你需要删除NoActionBar ,使其成为<activity android:name=".MainActivity" android:theme="@style/AppTheme"> ,因为用NoActionBar设置应用程序不知道是否需要一个操作栏,当你在MainActivity.java里面调用一个时

在你的活动中的这一行:

 super.onCreate(savedInstanceState); setContentView(R.layout.Activity_Main); 

用这个:

 super.onCreate(savedInstanceState); setContentView(R.layout.*); 

*是你的活动

在我的情况是因为styles.xml设置错误的父主题,即当然NoActionBar主题getSupportActionbar()为null:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 

把它改成别的东西修复它:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

当使用AppCompatActivity时必须调用Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);getSupportActionBar()

 public class PageActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); this.getSupportActionBar().setDisplayHomeAsUpEnabled(false); } } 

尝试这样做:

  getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

而不是这个:

 actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);