Android Studio 3.2にアップデートした後、lintから次のような「バグの可能性」が発生しました。
"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;
}
AndroidLintはAndroid Studio 3.2アップデートの前にこのメソッドにフラグを立てたことはありませんでしたが、メソッドと「親」パラメーターに2つのフラグが表示されるようになりました
これが使用された2つのインポートです
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;
キャッシュを無効にして、Android Studioを再起動してください。
この警告が表示されるメソッドパラメータには、@ NonNullアノテーションを付けてください。これが表示される場所でオーバーライドするメソッドはすべて、同じようにします(@Overrideの上または下の行で)。
@NonNullアノテーションをメソッドに追加します。
@NonNull
@Override
public void myOverridenMethod() {
//your code
}
または単にそれを無視します。
私のAndroid gradleツールが古すぎます(2.x)プロジェクトをアップグレードするだけなのでAndroid gradleツールを3.xに解決するので同じ問題があります。
dependencies {
classpath 'com.Android.tools.build:gradle:3.2.1'
}
「アノテーションなしのメソッドは、@ NonNullアノテーション付きのメソッドをオーバーライドします」。
それはかなり明確です。
おそらくそれらの1つを削除する必要があります@NonNull
メソッドから(または、メソッドにすでに追加されていて、メソッドを作成している人もいます@NonNull
)、 そう:
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent)
これにより、これらのパラメータのいずれかが内部にある場合、getView
をnull
にすることはできません。