尝试调用虚拟方法' android.graphics.drawable.drabable android.content.pm.packagemanager.loaditemicon在null对象参考上

发布于 2025-01-18 18:02:05 字数 2599 浏览 2 评论 0原文

在某些设备上,我会遇到此崩溃,而在大多数设备上,一切都可以正常工作,谁能解释此例外的原因以及如何修复它?

我的代码:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

久光 2025-01-25 18:02:05

如果您的应用程序在低设备SDK(如Lollipop)中遇到问题,那么我有解决方案。您需要从 drawable 复制所有图像 (.png) 并将它们粘贴到 drawable v24 中。我希望它会有所帮助。如果您有任何疑问。让我知道

If your app is having problem in device low SDK like Lollipop then I have solution. You need to copy all the images (.png) from your drawable and paste them into drawable v24. I hope it'll helpful. If you have any question. Let me know

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文