我从谷歌那里获得了我的Android应用程序的Crash Analytics,我偶尔会看到这个弹出窗口:
java.lang.NoClassDefFoundError
关于尝试打开意图。
方案是,用户点击按钮,他们在应用程序中的代码是:
Intent intent = new Intent(nameOfCurrentActivity.this, nameOfNewActivity.class);
startActivity(intent);
非常简单的东西。它几乎适用于所有设备,包括我拥有并经过测试的所有设备。这个新类正在启动并不是唯一的,因为它需要任何奇怪的硬件(IE,而不是相机活动),但它确实通过Http请求访问互联网。
我已经研究过以下链接而没有获得解决方案的提示:
我的问题是,如何在某些设备(IE,三星平板电脑),而不是其他设备上抛出此异常?应该&# 39;如果所有设备都在一个设备上工作,那么它的新意图是什么?
谢谢!
答案 0 :(得分:3)
很多时候,这可能是由运行代码的类引起的,这些代码依赖于它是某个API级别,IE Marshmallow,但使用它的设备是在以前的API上和检查权限被忽略或不包括在内;就像你点击禁用检查一样。
例如,您正在运行类似于View.OnScrollChangeListener的内容,以获取recyclerview。如果您正在编码并设置它:
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
myRecyclerview.setOnScrollChangeListener(this);
}
但是如果检查不包含构建,它将抛出错误。另一个例子是,如果您使用类本身作为上下文(this)来设置滚动侦听器。如果您使用类本身作为扩展Scroll侦听器但是在设备Pre-API 21上的上下文,它将在类加载时抛出错误。正如您可能猜到的那样,它抛出的错误是 NoClassDefError 。
这是因为“未来”API中提到的类在旧手机中尚不存在,因此找不到定义的类。
检查您的代码以查看该类中的任何内容是否需要某个API级别才能运行,如果是,请检查以确认您是否包含if检查构建版本。在我禁用检查之前很多次因为红线让我烦恼而又忘了回去添加支票。
答案 1 :(得分:0)
我今天想补充一下自己的经验。显然Supplier