Android Studio更新后无法解析符号“NonNull”

qoefvg9y  于 12个月前  发布在  Android
关注(0)|答案(7)|浏览(187)

我最近更新了Android Studio。之后,它似乎不再能够解析一些支持注解,例如@NonNull@Nullable。它在更新之前确实工作得很好。然而,一切仍然在编译,我能够执行代码,但它仍然显示符号无法被解析消息在我的导入。
到目前为止,我已经尝试过了:
1.在build.gradle中包含依赖项(模块:申请):

compile 'com.android.support:support-annotations:27.0.0'

字符串
1.我已使缓存无效并重新启动
1.清理和重建项目
1.(编辑)同步Gradle
我不知道为什么这不起作用,我真的很感激你的帮助。

cuxqih21

cuxqih211#

自android API 29('targetSdkVersion' 29)起com.android.support已被移至'androidx'库。
在您的build.gradle文件(应用程序级别)中,依赖项阻止使用...

dependencies{ 
    ...
    implementation 'androidx.annotation:annotation:1.1.0' 
}

字符串
.java文件中使用import,如下所示:

import androidx.annotation.NonNull;


再次构建您的项目!

kh212irz

kh212irz2#

我最近在一个库导入中遇到了类似的问题,为了解决这个问题,我不得不创造机会导入下面的语句:
在两次进口后不得不改变。
出发地:

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

字符串
收件人:

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

9lowa7mx

9lowa7mx3#

我也是这样。我被卡住了相当长的一段时间--为了让Android Studio保持最新,对某人玩了一个多么糟糕的把戏。简单地重建项目甚至没有接近工作。
显然,gradle做了一些更改,阻止了旧程序的正确编译。
我必须 * 创建一个新项目 * 并将所有文件复制到新项目中。是的,它咬毛茸茸的绿色大家伙,但这是我必须做的让它工作。
我希望有人能给出比这更好的答案!(我很想和那个做出改变的白痴“谈”几分钟!这不是第一次发生这种情况--也不是第二次,第三次,第四次,等等。)

!!!新信息!!!

刚开始一个新项目,砰的一声,这种情况又发生了。它使用的是主模板/设计模板。是的,正如Android Studio生成的代码一样,由于NonNull没有正确导入,ItemListActivity.java和其他文件中存在错误。
所以,我去了app build.gradle文件,查看了所有的依赖警告。为什么项目生成器使用旧的依赖项?所以我更新了所有的依赖项来使用最新的。"现在就同步",成功了!
以下是我更新的几行:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

字符串
当然,您必须更改数字以反映当前版本。
同样,它令人难以置信的想象,直接从盒子模板有这样明显的错误。总有一天我要去山景城旅行,把鞋带系在一起。

c2e8gylq

c2e8gylq4#

点击Build --> Rebuild Project。AS也会刷新Gradle依赖项和您的项目。

wribegjk

wribegjk5#

单击红色灯泡图标并选择AddAnnotationtoClasspath。这将解决问题。

uplii1fm

uplii1fm6#

如果您使用的是Android Studio,请使用Refactor -> Migrate to AndroidX选项并执行迁移。

jpfvwuh4

jpfvwuh47#

  • 将此添加到build.gradle(应用级):*
implementation 'org.jetbrains:annotations:16.0.2'

字符串
使用@NotNull而不是@NonNull。
下面是Java文件中@Nullable和@NotNull的导入:

import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;


如果这仍然不起作用,那么创建您自己的NotNull或NonNull,以下是创建您自己的NonNull的代码:

@Documented
    @Retention(RetentionPolicy.CLASS)
    @Target({METHOD, PARAMETER, ElementType.LOCAL_VARIABLE,ElementType.FIELD})
    public @interface NonNull{
        //Created by own NonNull
    }


对于可空:

@Documented
    @Retention(RetentionPolicy.CLASS)
    @Target({METHOD, PARAMETER, ElementType.LOCAL_VARIABLE,ElementType.FIELD})
    public @interface Nullable{
        //Created by own Nullable
    }


编码快乐!

相关问题