尝试调用虚拟方法' android.graphics.drawable.drabable android.content.pm.packagemanager.loaditemicon在null对象参考上
在某些设备上,我会遇到此崩溃,而在大多数设备上,一切都可以正常工作,谁能解释此例外的原因以及如何修复它?
我的代码:
private fun onGetBatteryApps() {
mBatteryAppsBinding.batteryAnim.playAnimation()
val pm: PackageManager = requireActivity().packageManager
val apps: List<PackageInfo> = requireActivity().packageManager.getInstalledPackages(
PackageManager.GET_META_DATA)
val rem = apps.filter { pm.getLaunchIntentForPackage(it.packageName) != null && it.packageName != BuildConfig.APPLICATION_ID}
var j = 0
timer = object : CountDownTimer(300, 300) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
if (rem[j].packageName != BuildConfig.APPLICATION_ID) {
mBatteryAppsBinding.appName.text =
activity?.application?.packageManager?.let {rem[j].applicationInfo.loadLabel(it).toString()
}
if (rem[j].applicationInfo.loadIcon(activity?.application?.packageManager) != null) {
mBatteryAppsBinding.appIcon.setImageDrawable(rem[j].applicationInfo.loadIcon(activity?.application?.packageManager))
} else {
mBatteryAppsBinding.appIcon.setImageDrawable(resources.getDrawable(R.drawable.ic_android_white_24dp))
}
j++
if (j == rem.size - 1) j = 0
start()
}
}
}.start()
}
我的日志:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.content.pm.PackageManager.loadItemIcon(android.content.pm.PackageItemInfo, android.content.pm.ApplicationInfo)' on a null object reference
at android.content.pm.PackageItemInfo.loadIcon(PackageItemInfo.java:269)
at com.myapplication.applicationname.view.fragment.BatteryAppsFragment$onGetBatteryApps$1.onFinish(BatteryAppsFragment.java:2)
at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:127)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8393)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
基于Crashlytics的数据,这可以在任何设备和Android版本上发生
On some devices I get this crash, whereas on most devices everything works fine, can anyone explain the reason for this exception and how to fix it?
My code:
private fun onGetBatteryApps() {
mBatteryAppsBinding.batteryAnim.playAnimation()
val pm: PackageManager = requireActivity().packageManager
val apps: List<PackageInfo> = requireActivity().packageManager.getInstalledPackages(
PackageManager.GET_META_DATA)
val rem = apps.filter { pm.getLaunchIntentForPackage(it.packageName) != null && it.packageName != BuildConfig.APPLICATION_ID}
var j = 0
timer = object : CountDownTimer(300, 300) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
if (rem[j].packageName != BuildConfig.APPLICATION_ID) {
mBatteryAppsBinding.appName.text =
activity?.application?.packageManager?.let {rem[j].applicationInfo.loadLabel(it).toString()
}
if (rem[j].applicationInfo.loadIcon(activity?.application?.packageManager) != null) {
mBatteryAppsBinding.appIcon.setImageDrawable(rem[j].applicationInfo.loadIcon(activity?.application?.packageManager))
} else {
mBatteryAppsBinding.appIcon.setImageDrawable(resources.getDrawable(R.drawable.ic_android_white_24dp))
}
j++
if (j == rem.size - 1) j = 0
start()
}
}
}.start()
}
My logs:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.content.pm.PackageManager.loadItemIcon(android.content.pm.PackageItemInfo, android.content.pm.ApplicationInfo)' on a null object reference
at android.content.pm.PackageItemInfo.loadIcon(PackageItemInfo.java:269)
at com.myapplication.applicationname.view.fragment.BatteryAppsFragment$onGetBatteryApps$1.onFinish(BatteryAppsFragment.java:2)
at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:127)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8393)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
Based on the data in Crashlytics, this can happen on any device and Android version
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的应用程序在低设备
SDK
(如Lollipop
)中遇到问题,那么我有解决方案。您需要从drawable
复制所有图像 (.png) 并将它们粘贴到drawable v24
中。我希望它会有所帮助。如果您有任何疑问。让我知道If your app is having problem in device low
SDK
likeLollipop
then I have solution. You need to copy all the images (.png) from yourdrawable
and paste them intodrawable v24
. I hope it'll helpful. If you have any question. Let me know