我是新来的kotlin,我已经转换了一些代码从java,但似乎有什么问题, the R in findViewById(R.id.my_id)突出显示为红色,它显示此消息:"未解决的引用: R"...我一直在寻找一个解决方案,但我似乎不明白,那么我该怎么办?这是一张截图:
所以这是一个误导性的错误。找到根本原因的最快方法是运行:
bash gradlew assembleDebug --debug
然后向上滚动并查找真正发生的错误。
然而,如果你看起来仍然没有你想要的答案,那就继续读下去。
我要解释一下30000英尺高的景象。这不是确切的顺序或确切的流程,只是非常接近;)所以,如果你知道更多,然后我做的确切顺序和关心作出更正与链接,请放心,我不会阻止你:)。
过程
R文件是生成代码。
这一代人有一个规矩。
Gradle会做的很神奇,先拉它的依赖项,然后启动它的警告和错误树,
然后Android在幕后将所有Kotlin转换为Java。没错,我们深爱的Kotlin仍然必须是Java,才能为我们深爱的ART虚拟机编译。
然后,它运行并执行您为JVM静态和其他一些任务创建的适配器。接下来,它首先编译所有的xml数据库绑定文件,以创建生成的数据库绑定文件。
如果一切都成功,它将继续处理资产和资源。它为代码中引用的每个资源创建指针或ID。接下来,它将运行并开始编译代码和打包过程。
这是一个非常简单的过程,但问题就在这里。
误导性错误
如果在R生成完成之前任何步骤失败,则R不会生成。有时一个简单的重建是所有你需要做的,有时一个简单的文件-
所以下一个问题是
“好吧,如果错误毫无价值或不存在,我们如何排除它”。
首先,让我们谈谈这些错误出现的许多方式。
接下来,让我们谈谈导致问题的潜在候选人。因为有太多的lol了。
不幸的是,这种情况在前沿技术中经常发生,因为UI工具还不能与基于终端的工具同步。因此,我建议您在终端中从项目根运行
bash gradlew assembleDebug --debug
当它失败时,它会的。开始向上滚动日志,直到你找到红色,在那里你可以看到什么是真正失败的,并阻止下一个阶段的发生。
当你开始处理数据绑定时,你会发现这一点特别有用。
提示:
当您开始处理数据绑定时,请确保经常编译和运行,因为目标是在执行其他文件之前立即识别,以确保您没有中断生成,并使您的生活更容易了解您刚才添加的代码导致的问题,以免走得太远。
在继续之前,编译和运行确认没有问题的时间。
正如我上面提到的,原因是为了避免得到如此多的更改,以至于发现与生成的数据绑定代码相关的一般性模糊、可怕的错误成为故障排除的噩梦。我相信这些工具会有所改进,但现在,请帮自己一个忙,在更改数据绑定相关项时经常编译和运行。
快乐编码
我用com.Android工具。建造:梯度:3.3。0-alpha13,并且有相同的问题。正在更改为稳定版本3.2。我帮我解决了这个问题。
这个问题可能是由很多因素造成的,
>
此外,具有来自相同组但具有不同版本的库可能会导致问题或甚至更多运行时错误。使用排除组方法,如以下所示:实现('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的回答之后,我更新了代码,如下所示(对于那些感兴趣的人):