如何解决Android Studio 3.2后的NonNull注释问题?

6

升级到Android Studio 3.2后,我一直收到来自Lint的“Probable bugs”警告,内容如下:

"Not annotated method overrides method annotated with @NonNull".

在更新到Android Studio 3.2之前我没有任何问题,我该怎么解决这个问题?

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View row = convertView;
    ViewHolder holder;

    if (convertView == null) {
        holder = new ViewHolder();
        row = LayoutInflater.from(context).inflate(R.layout.gallery_view_row, parent, false);
        holder.imageView = row.findViewById(R.id.filePath);
        row.setTag(holder);
    } else holder = (ViewHolder) row.getTag();

    String file_path = objects.get(position);
    GlideApp.with(context).load(MovieDB.IMAGE_URL + context.getResources().getString(R.string.galleryImgSize) + file_path)
            .into(holder.imageView);
    return row;
}

Android Studio 3.2更新前,Android Lint从未标记过这个方法,但现在我在该方法和“parent”参数上收到了两个标记。
以下是使用的两个导入。
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

问题仅存在于“ArrayAdapter”类中,其超类有这5个标为红色的导入。
import android.annotation.ArrayRes;
import android.annotation.IdRes;
import android.annotation.LayoutRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
6个回答

11

我曾经遇到过同样的问题,最终找到了解决方法,希望对你有用...

打开设置,选择"编辑器",然后选择"检查"。

在检查列表中,进入"可能的错误",然后是"@NotNull/@Nullable问题"。

在右侧窗格中,选择"配置注释"按钮。

将"androidx.annotation.Nullable"和"androidx.annotation.NonNull"添加到各自的列表中。我还把它们设置为默认值。

不再看到这种令人发狂的行为。

截屏


0
"未注释的方法覆盖了使用@NonNull注释的方法"。
很明显。
您可能应该从该方法中删除其中一个@NonNull(或者可能已经在该方法中添加了这些内容,并且只是使该方法成为@NonNull),因此:
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent)

这将说明在任何情况下,getView 都不能带有这些参数中的任何一个为 null


它不起作用。这可能与迁移到AndroidX有关吗? - Karl Ghosn
这只是一个lint警告。因此,如果没有错误或崩溃出现,那么我提供的代码就没有问题。然而,我更喜欢使用带有新AndroidX的Kotlin。您还可以尝试将@NonNull添加到参数中,并删除方法的@NonNull,然后检查看会发生什么。 - ʍѳђઽ૯ท

0

任何出现此警告的方法参数,请使用@NonNull进行注释。任何您要覆盖的方法,也请在@ Override上方或下方的行上执行相同操作。


我已经在方法和参数上注释了@NonNull,只是Android Lint在3.2更新后会标记这些方法。这个更新有什么问题? - Karl Ghosn

0
在你的方法中添加@NonNull注解:
@NonNull
@Override
public void myOverridenMethod() {
    //your code
}

或者直接忽略它。


1
@NonNull 已经存在于 Android Lint 标记的所有方法中。 - Karl Ghosn
你的重写方法是什么?你能否编辑你的问题并提供一个包含该方法的示例? - TheWanderer

0
尝试清除缓存并重新启动Android Studio。

请检查您是否从正确的包中导入了此注释。 - Ernest Zamelczyk

0

我也遇到了同样的问题,因为我的安卓Gradle工具版本太旧了(2.x)。将项目安卓Gradle工具升级到3.x就可以解决这个问题。

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接