getActivity 空异常警告?

Dav*_*per 5 android android-fragments android-activity

我有一个片段,我将在其中执行以下操作:

getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                                }
                    });
Run Code Online (Sandbox Code Playgroud)

在这里,我收到runOnUiThread了警告may produce NullPointerException。代码可以正常工作。Android Studio 建议我像这样更改代码:

Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
Run Code Online (Sandbox Code Playgroud)

这是明智的吗?有没有其他/更好的方法?

Hoc*_*e B 6

这取决于您的目标是什么:

1)您希望方法调用者知道他在错误的状态下调用此方法犯了一个错误,其中getActivity()

private void myMethod() {
    if(null == getActivity()) {
        throw new IllegalStateException("Trying to call getActivity() at a state where the Activity equals null"); // Or new NullPointerException("")
    }
    // Do your stuff with getActivity()
}
Run Code Online (Sandbox Code Playgroud)

2)你知道在你的情况下getActivity()不会抛出 a NullPointerException

private void myMethod() {
    assert getActivity() != null;
    // Do your stuff with getActivity()
}
Run Code Online (Sandbox Code Playgroud)

3)您知道getActivity()可能为空,您不希望应用程序突然停止:

private void myMethod() {
    if(null == getActivity()) {
        return;
    }
    // Do your stuff with getActivity()
}
Run Code Online (Sandbox Code Playgroud)

使用 Objects.requireNonNull() 还需要 api 级别 19 (4.4 (KITKAT))

您还可以在这里获得大量信息