java.lang.RuntimeException - 引起:java.lang.ArithmeticException

问题描述

这里有两个游戏控制台日志,我认为两者都是相同的问题。
我在 Play 商店中的应用程序中使用了 https://github.com/z3r0c00l-2k/AquaDroid 这个库。
但我不知道如何解决正在发生的崩溃。
请有人帮助我,也在下面发布shallNotify的代码...请帮助

java.lang.RuntimeException:
在 android.app.ActivityThread.handleReceiver (ActivityThread.java:4114)
在 android.app.ActivityThread.access$1500 (ActivityThread.java:250)
在 android.app.ActivityThread$H.handleMessage (ActivityThread.java:1984)
在 android.os.Handler.dispatchMessage (Handler.java:106)
在 android.os.Looper.loop (Looper.java:250)
在 android.app.ActivityThread.main (ActivityThread.java:7766)
java.lang.reflect.Method.invoke (Native Method)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:604)
在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:958)
引起:java.lang.ArithmeticException:
在 myapp.w3.b.f(未知来源:47)
在 myapp.w3.b.e(来源不明)
在 myapp.receivers.NotifierReceiver.onReceive(未知来源:91)
在 android.app.ActivityThread.handleReceiver (ActivityThread.java:4105)

java.lang.RuntimeException:
在 android.app.ActivityThread.handleReceiver (ActivityThread.java:3798)
在 android.app.ActivityThread.access$1400 (ActivityThread.java:220)
在 android.app.ActivityThread$H.handleMessage (ActivityThread.java:1871)
在 android.os.Handler.dispatchMessage (Handler.java:107)
在 android.os.Looper.loop (Looper.java:214)
在 android.app.ActivityThread.main (ActivityThread.java:7403)
java.lang.reflect.Method.invoke (Method.java)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:935)
引起:java.lang.ArithmeticException:
在 myapp.helpers.NotificationHelper.shallNotify (NotificationHelper.java:47)
在 myapp.helpers.NotificationHelper.notify (NotificationHelper.java)
在 myapp.receivers.NotifierReceiver.onReceive (NotifierReceiver.java:91)
在 android.app.ActivityThread.handleReceiver (ActivityThread.java:3789)
在 android.app.ActivityThread.access$1400 (ActivityThread.java:220)
在 android.app.ActivityThread$H.handleMessage (ActivityThread.java:1871)
在 android.os.Handler.dispatchMessage (Handler.java:107)
在 android.os.Looper.loop (Looper.java:214)
在 android.app.ActivityThread.main (ActivityThread.java:7403)
java.lang.reflect.Method.invoke (Method.java)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:935)

        private fun shallNotify(): Boolean {
        val prefs = ctx.getSharedPreferences(AppUtils.USERS_SHARED_PREF,AppUtils.PRIVATE_MODE)
        val sqliteHelper = sqliteHelper(ctx)

        val percent = sqliteHelper.getIntook(AppUtils.getCurrentDate()!!) * 100 /      prefs.getInt(AppUtils.TOTAL_INTAKE,0)

        var doNotdisturbOff = true

        val startTimestamp = prefs.getLong(AppUtils.WAKEUP_TIME,0)
        val stopTimestamp = prefs.getLong(AppUtils.SLEEPING_TIME_KEY,0)

        if (startTimestamp > 0 && stopTimestamp > 0) {
            val Now = Calendar.getInstance().time

            val start = Date(startTimestamp)
            val stop = Date(stopTimestamp)

            doNotdisturbOff = compareTimes(Now,start) >= 0 && compareTimes(Now,stop) <= 0
        }

        return doNotdisturbOff && (percent < 100)
    }
        fun notify(id: Long,notification: NotificationCompat.Builder?) {
        if (shallNotify()) {
            getManager()!!.notify(id.toInt(),notification!!.build())
        } else {
            Log.i("AquaDroid","dnd period")
        }
    }
        override fun onReceive(context: Context,intent: Intent) {

        val prefs = context.getSharedPreferences(AppUtils.USERS_SHARED_PREF,AppUtils.PRIVATE_MODE)
        val notificationsTone = prefs.getString(
            AppUtils.NOTIFICATION_TONE_URI_KEY,ringtoneManager.getDefaultUri(
                ringtoneManager.TYPE_NOTIFICATION
            ).toString()
        )

        val title = context.resources.getString(R.string.app_name)
        val messagetoShow = prefs.getString(
            AppUtils.NOTIFICATION_MSG_KEY,context.resources.getString(R.string.pref_notification_message_value)
        )

        /* Notify */
        val nHelper = NotificationHelper(context)
        @SuppressLint("ResourceType") val nBuilder = messagetoShow?.let {
            nHelper
                .getNotification(title,it,notificationsTone)
        }
        nHelper.notify(1,nBuilder)

    }

解决方法

val percent = sqliteHelper.getIntook(AppUtils.getCurrentDate()!!) * 100 /      prefs.getInt(AppUtils.TOTAL_INTAKE,0)

您可能在此处除以零。 sharedpreferences 的默认值是 0,因此这里崩溃的一种明显方法是在 prefs 中没有 TOTAL_INTAKE 的值,或者具有零值。