Android Studio-为什么RequireReviewById(R.id.recyclerview)不能在API 22中工作(它在28中)

Android Studio-为什么RequireReviewById(R.id.recyclerview)不能在API 22中工作(它在28中),android,android-recyclerview,Android,Android Recyclerview,简言之,API 28都很好;API 22应用程序在MainActivity.onCreate中崩溃 java.lang.NoSuchMethodError:不需要虚拟方法requireViewById RecyclerView recyclerView = requireViewById(R.id.recyclerview); 在以下行: RecyclerView RecyclerView=requireReviewByIdr.id.RecyclerView 现在,详细的解释是: 我正在安装一

简言之,API 28都很好;API 22应用程序在MainActivity.onCreate中崩溃

java.lang.NoSuchMethodError:不需要虚拟方法requireViewById

RecyclerView recyclerView = requireViewById(R.id.recyclerview);
在以下行:

RecyclerView RecyclerView=requireReviewByIdr.id.RecyclerView

现在,详细的解释是:

我正在安装一个Android Studio应用程序。我在activity_main.xml中有一个MVVM集,其中包括一个android.support.design.widget.CoordinatorLayout中的RecyclerView;android.support.v7.widget.RecyclerView有一个工具:listitem=@layout/parcel\u item;parcel_item.xml是一个android.support.v7.widget.CardView

根据API 28,一切似乎都很好。当我运行到API 22时——无论是在我的物理三星Galaxy Note平板电脑Android 5.1.1 API 22上,还是在虚拟Nexus 7 2012 API 22上——应用程序几乎立即崩溃。在MainActivity.onCreate中:

RecyclerView RecyclerView=requireReviewByIdr.id.RecyclerView

与:

问题是,没有虚拟方法requireViewById似乎意味着一个虚拟方法没有在某个地方被重写,但是——正如我前面提到的——它在API 28下工作得很好

我在网上找不到任何特定于无虚拟方法RequiredViewById的东西,我尝试了与java.lang.NoSuchMethodError相关的各种帖子所建议的一切,包括文件|使缓存无效/重新启动和检查我的Gradle脚本以及我的能力;我对Android Studio和java非常陌生。都没有用

MainActivity.java

和build.gradle模块:应用程序

你必须更新上面的行


您必须更新上面的行。

它是findViewById而不是requireViewById

RecyclerView recyclerView = requireViewById(R.id.recyclerview);
应该是:

RecyclerView recyclerView = findViewById(R.id.recyclerview);

另外,如果您使用的是MVVM,您可能会从数据绑定库中受益:

它是findViewById而不是requireViewById

RecyclerView recyclerView = requireViewById(R.id.recyclerview);
应该是:

RecyclerView recyclerView = findViewById(R.id.recyclerview);
另外,如果您使用的是MVVM,那么查看数据绑定库可能会使您受益匪浅:

很简单,RequireReviewById是在API级别28中添加的,因此错误消息:

java.lang.NoSuchMethodError: No virtual method requireViewById
应该逐字阅读-在运行API级别低于28的运行时,此方法根本不存在。通常情况下,这类错误是编译错误,但是在这种情况下,不会在编译时引发错误,因为您是针对具有该方法的库进行编译的。但是,该方法在运行时版本的Android API<28中不存在

发件人::

很简单,RequireReviewById是在API级别28中添加的,因此错误消息:

java.lang.NoSuchMethodError: No virtual method requireViewById
应该逐字阅读-在运行API级别低于28的运行时,此方法根本不存在。通常情况下,这类错误是编译错误,但是在这种情况下,不会在编译时引发错误,因为您是针对具有该方法的库进行编译的。但是,该方法在运行时版本的Android API<28中不存在

发件人::


堆栈跟踪表明问题在于DepotActivity,而不是MainActivity。去触觉性是否扩展了普通的活动,而不是简单的活动?这就解释了为什么它会在旧的API级别崩溃,而不是新的API级别。我这里有两个版本:Depot和Main。这是我在准备这篇文章时的失误。已经纠正了。很好的理解,虽然我不确定你说的两个版本是什么意思,但我在第一次评论中指出的似乎仍然是最有可能的问题。您确定您运行的任何获取堆栈跟踪的活动实际上都是AppCompatActivity,而不仅仅是普通活动吗?另外,您真的打算使用RequireReviewById吗?正如下面的答案所暗示的,从一开始就有另一种选择。哦,没关系。那是我的错。他们没有将RequireReviewById添加到AppCompatActivity。它在ActivityCompat中。是的,你必须使用findViewById来这样调用,除非你真的更愿意使用ActivityCompat助手方法,但我认为没有什么理由这么做。@Mike M.是的。我正在将Delphi应用程序转换为Android Studio。我称我的主要活动为触觉,以符合我以前的情况。我在这里发帖之前把它改回来了。但是,我首先抓到了堆栈跟踪,堆栈跟踪是说问题在于depotractivity,而不是MainActivity。去触觉性是否扩展了普通的活动,而不是简单的活动?这就解释了为什么它会在旧的API级别崩溃,而不是新的API级别。我这里有两个版本:Depot和Main。这是我在准备这篇文章时的失误。已经纠正了。很好的理解,虽然我不确定你说的两个版本是什么意思,但我在第一次评论中指出的似乎仍然是最有可能的问题。您确定您运行的任何获取堆栈跟踪的活动实际上都是AppCompatActivity,而不仅仅是普通活动吗?另外,您真的打算使用RequireReviewById吗?正如下面的答案所暗示的,sinc还有另一个选择
e开头。哦,没关系。那是我的错。他们没有将RequireReviewById添加到AppCompatActivity。它在ActivityCompat中。是的,你必须使用findViewById来这样调用,除非你真的更愿意使用ActivityCompat助手方法,但我认为没有什么理由这么做。@Mike M.是的。我正在将Delphi应用程序转换为Android Studio。我称我的主要活动为触觉,以符合我以前的情况。我在这里发帖之前把它改回来了。但是,我先抓到了堆栈跟踪。这就解决了它。谢谢另外,我现在正在研究数据绑定库的内容。再次感谢。我试着投票——还没有足够的声誉……不用担心,很高兴这有帮助:这解决了问题。谢谢另外,我现在正在研究数据绑定库的内容。再次感谢。我试着投票-还没有足够的声誉…不用担心,很高兴这有帮助:
RecyclerView recyclerView = requireViewById(R.id.recyclerview);
RecyclerView recyclerView = findViewById(R.id.recyclerview);
java.lang.NoSuchMethodError: No virtual method requireViewById