当前位置: 首页 > 知识库问答 >
问题:

Android Studio 3.1.3-未解析参考:R-静态编程语言

上官修文
2023-03-14

我是新来的kotlin,我已经转换了一些代码从java,但似乎有什么问题, the R in findViewById(R.id.my_id)突出显示为红色,它显示此消息:"未解决的引用: R"...我一直在寻找一个解决方案,但我似乎不明白,那么我该怎么办?这是一张截图:

共有3个答案

岳研
2023-03-14

所以这是一个误导性的错误。找到根本原因的最快方法是运行:

bash gradlew assembleDebug --debug

然后向上滚动并查找真正发生的错误。

然而,如果你看起来仍然没有你想要的答案,那就继续读下去。

我要解释一下30000英尺高的景象。这不是确切的顺序或确切的流程,只是非常接近;)所以,如果你知道更多,然后我做的确切顺序和关心作出更正与链接,请放心,我不会阻止你:)。

过程

R文件是生成代码。

这一代人有一个规矩。

Gradle会做的很神奇,先拉它的依赖项,然后启动它的警告和错误树,

然后Android在幕后将所有Kotlin转换为Java。没错,我们深爱的Kotlin仍然必须是Java,才能为我们深爱的ART虚拟机编译。

然后,它运行并执行您为JVM静态和其他一些任务创建的适配器。接下来,它首先编译所有的xml数据库绑定文件,以创建生成的数据库绑定文件。

如果一切都成功,它将继续处理资产和资源。它为代码中引用的每个资源创建指针或ID。接下来,它将运行并开始编译代码和打包过程。

这是一个非常简单的过程,但问题就在这里。

误导性错误

如果在R生成完成之前任何步骤失败,则R不会生成。有时一个简单的重建是所有你需要做的,有时一个简单的文件-

所以下一个问题是

“好吧,如果错误毫无价值或不存在,我们如何排除它”。

首先,让我们谈谈这些错误出现的许多方式。

  • 找到重复的数据库化类
  • xml绑定错误在第#行
  • 找不到匹配的绑定签名:自定义适配器方法
  • 找不到正确项目的R文件,只显示子模块的导入选项或不正确的命名空间R文件。
  • 找不到活动/片段的数据绑定实用程序或数据绑定
  • 还有许多其他不同的方式,太多了,无法一一列举

接下来,让我们谈谈导致问题的潜在候选人。因为有太多的lol了。

  • 渐变同步问题

不幸的是,这种情况在前沿技术中经常发生,因为UI工具还不能与基于终端的工具同步。因此,我建议您在终端中从项目根运行

bash gradlew assembleDebug --debug

当它失败时,它会的。开始向上滚动日志,直到你找到红色,在那里你可以看到什么是真正失败的,并阻止下一个阶段的发生。

当你开始处理数据绑定时,你会发现这一点特别有用。

提示:

当您开始处理数据绑定时,请确保经常编译和运行,因为目标是在执行其他文件之前立即识别,以确保您没有中断生成,并使您的生活更容易了解您刚才添加的代码导致的问题,以免走得太远。

在继续之前,编译和运行确认没有问题的时间。

  • 如果添加几个JVM静态编译并运行
  • 如果将变量添加到要使用的XML中
  • 如果您绑定到1个文件中的模型属性
  • 如果将绑定添加到JVMStatic
  • 如果向模型添加可绑定的成员或属性
  • 如果将可观察到的成员变量或属性重构为子类或基类
  • 可以影响生成代码的任何其他xml或绑定相关元素。

正如我上面提到的,原因是为了避免得到如此多的更改,以至于发现与生成的数据绑定代码相关的一般性模糊、可怕的错误成为故障排除的噩梦。我相信这些工具会有所改进,但现在,请帮自己一个忙,在更改数据绑定相关项时经常编译和运行。

快乐编码

陆英毅
2023-03-14

我用com.Android工具。建造:梯度:3.3。0-alpha13,并且有相同的问题。正在更改为稳定版本3.2。我帮我解决了这个问题。

辛盛
2023-03-14

这个问题可能是由很多因素造成的,

>

此外,具有来自相同组但具有不同版本的库可能会导致问题或甚至更多运行时错误。使用排除组方法,如以下所示:实现('com.squareup.picasso: picasso: 2.71828'){排除(组:'com.android.support')}在这种情况下,picasso库使用android.support组件,picasso中使用的android库版本与您当前在应用程序中使用的版本不同,因此为了解决这个问题,我们必须将其完全排除它的子库和类组。

它也可能发生在资源和代码不匹配的情况下,包括活动中的这个导入行也可以解决这个问题:导入com.package.name.R

有时它会发生,因为IDE,性能或内存...不时清理项目可能会节省你一些时间,在Android Studio上会是这样的:Build-

我注意到,在导入新资源时,这个问题经常发生在我身上,在名称中使用禁用字符会引发错误,例如,大写或特殊字母

作为建议,如果您使用静态编程语言,我真的建议在您的活动中使用静态编程语言扩展,例如:导入kotlinx.android.synthetic.main.activity_page。*或者如果您使用自定义视图:kotlinx.android.synthetic.main.view_layout.view.*之后,在活动的onCreat()方法中,您只需调用id,例如:my_edit_text_ID. text="静态编程语言DBest!",或从自定义视图:mCostumView.my_edit_text_ID. text="静态编程语言DBest!"

编辑:

>

com.android.R

com.example.package.R

您必须只导入R库与您的应用程序包名称,在这种情况下com.example.package.R有时库根本没有导入,要导入它,请单击未解析的引用R和按Alt Enter

编辑:

正如tobltobs在评论部分中提到的:“大多数情况下,问题是由另一个错误引起的,该错误阻止构建系统创建生成的源。要找到根本原因,请查看gradle日志(构建输出中绿色锤子下方的“切换视图”图标),并查找与R或BuildConfig无关的错误(也生成)。如果没有其他错误,并且R的问题仍然存在,则此列表中的某些内容可能会有所帮助。”

编辑:

正如Patrick Beagan提到的,Kotlin扩展现在已经被弃用了——我建议改用ViewBinding

 类似资料:
  • 我有一个使用Kotlin 1.0版的Android项目。Android Studio中的0-beta-1038。 我可以在不同的部分使用Kotlin运行它,它在模拟器中编译并工作,但当我尝试使用ReadWriteProperty时,它会给出以下错误消息: 未解析的引用:ReadWriteProperty 类称为首选Utils.kt: build.grade(模块:app) build.grade(

  • 考虑以下代码,我们获取列表的块,加入它们并打印到标准输出: 代码工作正常。我想更改lambda调用(

  • 在生成中更新依赖项后。gradle(模块:app)在gradle脚本中,所有由R定义的布局、字符串和所有引用都不可用。我在模块应用程序中有以下代码: 在搜索项目时,通过项目资源管理器,项目似乎不再有R文件。

  • 我正在尝试使用Exposed on Kotlin编写CRUD服务。我有一张多对一的参考表。当我尝试插入时,我得到 Java语言lang.IllegalStateException:上下文中没有事务。 这是表和实体 下面是用于创建的服务方法 保存实体后调用toContact()方法时引发错误 var contact=contactEntity。toContact() 创建此类实体的正确方法是什么?

  • 我正在尝试转换到Kotlin。我正在按照Kotlin的指示行事。组织: getClass() 为了从对象检索类型信息,我们使用javaClass扩展属性。 foo.java类 而不是Java的使用。 ::class.java 我有一个名为HomePage的类,它扩展了AppCompatActivity(在Android中)。我正在使用Android Studio。我试着做并且它有一个错误: 我怎样

  • 我想知道为什么在下面的代码中没有捕捉到异常: 函数的调用方式如下: 但我还是遇到了一个导致应用程序崩溃的异常: 我想说try/catch块会捕获异常,但唉。。。 什么原因导致异常没有被捕获?我想说线程并不重要,因为我使用try/get块来处理线程中的异常。 在Laalto的回答之后,我更新了代码,如下所示(对于那些感兴趣的人):