首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复可能产生java.lang.NullPointerException getActionBar方法

如何修复可能产生java.lang.NullPointerException getActionBar方法
EN

Stack Overflow用户
提问于 2015-04-22 09:14:21
回答 14查看 63K关注 0票数 74

我在一个活动中使用工具栏作为我的操作栏。我正在尝试将方法getActionBar().setDisplayHomeAsUpEnabled(true);添加到Activity.java文件中,以便对较旧的设备进行向上导航。

该方法会在Android Studio中产生以下错误消息:

方法调用可能会产生java.lang.NullPointerException

工具栏上的向上导航在较新的devices...now上工作得很好,我正在努力弄清楚如何确保它在较旧的设备上也能工作。请给我建议。

来自build.gradle:

代码语言:javascript
复制
dependencies {
   compile "com.android.support:appcompat-v7:22.1.0"
}

来自AndroidManifest.xml:

代码语言:javascript
复制
android:theme="@style/Theme.AppCompat.NoActionBar.FullScreen" 

来自styles.xml

代码语言:javascript
复制
<style name="Theme.AppCompat.NoActionBar.FullScreen" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>

来自Activity.java

代码语言:javascript
复制
public class CardViewActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.cardviewinput);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    if (toolbar != null) {
        // Up navigation to the parent activity for 4.0 and earlier
        getActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationIcon(R.drawable.ic_action_previous_item);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }

}
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2016-03-01 17:50:36

实际上,Android Studio不会向你显示“错误消息”,它只是一个警告。

一些答案建议使用断言,Dalvik运行时默认关闭了assertion,因此您必须实际打开它才能真正执行某些操作。在这种情况下(断言被关闭),您实际上所做的只是欺骗Android Studio不向您显示警告。另外,我不喜欢在生产代码中使用"assert“。

在我看来,你应该做的很简单。

代码语言:javascript
复制
if(getActionBar() != null){
   getActionBar().setDisplayHomeAsUpEnabled(true);
}

更新:如果您使用的是操作栏的支持库版本,则应将getActionBar()替换为getSupportActionBar()。

代码语言:javascript
复制
if(getSupportActionBar() != null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
票数 129
EN

Stack Overflow用户

发布于 2015-04-22 18:40:37

首先,您需要将工具栏设置为支持ActionBar。然后,如果您确定它将一直存在,只需将其断言为!= null。这将告诉编译器它不是null,所以null检查通过。

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);
   setContentView(R.layout.cardviewinput);

   Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
   setSupportActionBar(toolbar);

   assert getSupportActionBar() != null;
   getSupportActionBar().setDisplayHomeAsUpEnabled(true); // it's getSupportActionBar() if you're using AppCompatActivity, not getActionBar()
}
票数 34
EN

Stack Overflow用户

发布于 2015-04-25 13:53:48

安德鲁,谢谢你的回答。如果你有一个导航抽屉或者其他使用getSupportActionBar()的东西,你需要添加assert getSupportActionBar() != null;

和平,

示例:

代码语言:javascript
复制
@Override
public void setTitle(CharSequence title) {
    mTitle = title;
    assert getSupportActionBar() != null;
    getSupportActionBar().setTitle(mTitle);
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29786011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档