【问题标题】:ActionBar nullpointerException [duplicate]ActionBar nullpointerException [重复]
【发布时间】:2013-03-24 16:09:30
【问题描述】:

我想在我的应用中使用 ActionBarSherlock。当我打电话给getSupportActionBar() 时,我得到一个NullPointerException;我已经将 ActionBarSherlock 库导入到我的项目中。

这是我的 Java 类:

public class ProfileActivity extends SherlockActivity  {


    @Override
            public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
                com.actionbarsherlock.view.MenuInflater inflater = this.getSupportMenuInflater();
                inflater.inflate(R.menu.mainmenu, menu);
                return true;
            }

        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

                setContentView(R.layout.profile_page);



                getSupportActionBar().setTitle("Example!");  //nullpointerException


              }
        }

}

还有我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sal"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>



    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>

    <permission
        android:name="com.vogella.android.locationapi.maps.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <!-- The following two permissions are not required to use
     Google Maps Android API v2, but are recommended. -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="com.example.sal.permission.MAPS_RECEIVE"/>
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>




    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" 
        android:name=".FriendPickerApplication">



        <activity
            android:name="com.example.sal.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>

         <!--  Entry for RegisterActivity.class -->
        <activity android:name=".RegisterActivity"
                  android:label="Register New Account"></activity>
        <meta-data android:value="@string/app_id" android:name="com.facebook.sdk.ApplicationId"/>
        <activity android:label="@string/app_name" android:name="com.facebook.LoginActivity"></activity>
        <activity android:name=".ProfileActivity" android:label="Profile page"></activity>

        <meta-data
              android:name="com.google.android.maps.v2.API_KEY"
              android:value="AIzaSyDTVRXMTmfe3jZyAlt-87kRgqM8y4TzIto"/>


        <activity android:name="SaleMapActivity"></activity>
        <activity android:name="GroupMapActivity"></activity>
        <activity android:name="DeliverMapActivity"></activity>
        <activity android:name="PickFriendsActivity"></activity>
        <activity android:name="TabMainActivity"></activity>
        <activity android:name="itemSaleActivity"></activity>
        <activity android:name="FreindsActivity"></activity>
        <activity android:name="ExitActivity"></activity>
        <activity android:name="OneTimeDetailesScreen"></activity>

    </application>

</manifest>

谢谢。

这是我的风格:

<style name="AppTheme" parent="Theme.Sherlock.Light">
        <item name="android:windowActionBar">true</item>
    </style>

这里是logcat:

03-24 16:20:24.325: E/AndroidRuntime(1927): Caused by: java.lang.NullPointerException
03-24 16:20:24.325: E/AndroidRuntime(1927):     at com.example.sal.ProfileActivity.onCreate(ProfileActivity.java:349)
03-24 16:20:24.325: E/AndroidRuntime(1927):     at android.app.Activity.performCreate(Activity.java:5104)
03-24 16:20:24.325: E/AndroidRuntime(1927):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-24 16:20:24.325: E/AndroidRuntime(1927):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
03-24 16:20:24.325: E/AndroidRuntime(1927):     ... 23 more

【问题讨论】:

  • 您需要将 Logcat 的输出包含在 NullPointer 异常中。请张贴。
  • 嗨,我添加了 logcat,我查看了这篇文章,但它对我没有帮助
  • 请您也发布课程标题吗?
  • 我添加到主线程,我的类扩展了 SherlockActivity
  • 看看我的帖子

标签: java android


【解决方案1】:

您的应用程序主题是否扩展了 ABS 主题?

例如,您指定:

android:theme="@style/AppTheme"

你的风格应该是:

<style name="AppTheme" parent="Theme.Sherlock.Light">
    ...
</style>

另见this answer by Jake Wharton himself

【讨论】:

  • 嗨,我改变了我的风格(我还将它添加到主线程: 它再次给我 nullpointerException
  • 也许您正在更改窗口装饰以删除标题栏?通过删除标题栏,将没有操作栏,因此它将返回null
  • 从我的活动中可以看到,我没有删除标题栏...
  • getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 应该不需要;我建议删除该行。
  • 我删除了这一行,但是操作栏仍然没有显示给我..在操作栏中我只有徽标和我的应用程序的名称...
【解决方案2】:

我现在无法解释您为什么会获得 NPE,但请尝试以下操作:

而不是使用

getSupportActionBar().setTitle("Example!");  //nullpointerException

就用这个

  setTitle("Example!");

【讨论】:

  • 嗨,它没有解决我的问题,甚至没有改变我的标题..因为我写的操作栏仍然没有为我显示..在操作栏中我只有徽标和我的应用程序的名称...
  • 嗨,我添加了这个方法,但是它显示一个错误:“方法 setDisplayOptions(int) 未定义为 ProfileActivity 类型”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多