【问题标题】:Method invocation 'setTitle' may produce 'java.lang.NullpointerException'方法调用“setTitle”可能会产生“java.lang.NullpointerException”
【发布时间】:2020-02-02 10:10:10
【问题描述】:

我尝试使用以下代码为ActionBar 设置标题:

@Override
public void onResume() {
    ((MainActivity) getActivity()).getSupportActionBar().setTitle(getResources().getString(R.string.artist));
    super.onResume();
}

但 Android Studio 向我显示此警告:

我在 StackOverflow 上搜索,将通过在我的代码前面添加此代码 if(getSupportActionBar()!=null) 来修复它。但这会导致我的脚本出错。 我不确定如何解决这个问题。

【问题讨论】:

  • 你的意思是if(((MainActivity) getActivity()).getSupportActionBar()!=null) 虽然你应该使用回调机制
  • 在我的代码前面添加 'if(((MainActivity) getActivity()).getSupportActionBar()!=null' 后,警告继续显示。
  • setSupportActionBar(工具栏);在主要活动中编写 onCreate() 比在片段中编写 ((MainActivity) getActivity()).getSupportActionBar().setTitle(getResources().getString(R.string.artist));

标签: android android-actionbar


【解决方案1】:

您有多种选择来满足您的要求:

1 - 忽略警告

不用解释了,这不是错误

2 - 优雅的解决方案

用'if'语句包装你的行以确保它不为空

if(getSupportActionBar() != null) {
        getSupportActionBar().setTitle(getString(R.string.artist));
}

3 - 使用断言

assert getSupportActionBar() != null;
getSupportActionBar().setTitle(getString(R.string.artist));

4 - 移动警告

如果您在多个位置使用“getSupportActionBar”,则可以删除所有这些警告,作为回报,您只会收到有关 @NonNull 使用情况的警告。

@NonNull
@Override
public ActionBar getSupportActionBar() {
    return super.getSupportActionBar();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多