【问题标题】:Kotlin - IllegalArgumentException in overridden methodKotlin - 覆盖方法中的 IllegalArgumentException
【发布时间】:2018-04-23 21:00:17
【问题描述】:

在 Kotlin 中,我将覆盖这两个 Google 登录功能:

override fun onConnectionFailed(result: ConnectionResult) {
        if (result.hasResolution()) {
            try {
                result.startResolutionForResult(this, RESOLVE_CONNECTION_REQUEST_CODE)
            } catch (e: IntentSender.SendIntentException) {
                // Unable to resolve, message user appropriately
            }

        } else {
            val gaa = GoogleApiAvailability.getInstance()
            gaa.getErrorDialog(this, result.errorCode, 0)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        when (requestCode) {
            RESOLVE_CONNECTION_REQUEST_CODE -> if (resultCode == Activity.RESULT_OK) {
                mGoogleApiClient!!.connect()
            }
        }
    }

检查与谷歌的连接是否失败。

问题是,有时,当我关闭包含用户帐户的对话框时,该对话框会在 Activity 启动时弹出

喜欢这个:

我收到了一个IllegalArgumentException 和下面的 logcat

E/AndroidRuntime: 致命异常: main 进程:com.dancam.subscriptions,PID:6346 java.lang.RuntimeException:将结果 ResultInfo{who=null, request=6783, result=0, data=null} 传递给活动 {com.dancam.subscriptions/com.dancam.subscriptions.ActiveSubscriptions.Subscriptions_main} 失败:java.lang .IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数数据 在 android.app.ActivityThread.deliverResults(ActivityThread.java:4126) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:4169) 在 android.app.ActivityThread.-wrap20(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6186) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 原因:java.lang.IllegalArgumentException:指定为非空的参数为空:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数数据 在 com.dancam.subscriptions.ActiveSubscriptions.Subscriptions_main.onActivityResult(Subscriptions_main.kt:0) 在 android.app.Activity.dispatchActivityResult(Activity.java:6937) 在 android.app.ActivityThread.deliverResults(ActivityThread.java:4122) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:4169) 在 android.app.ActivityThread.-wrap20(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6186) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

指向onActivityResult 函数。

我尝试改变

requestCode: Int

requestCode: Int?

但是我显然得到了一个错误,因为该函数与其超类中的函数不同。

我该如何解决?

【问题讨论】:

    标签: android kotlin illegalargumentexception


    【解决方案1】:

    您需要将data 提及为nulldata: Intent? 也是如此,因为当取消操作或未发送任何结果时,data 意图可以是null

    传递结果失败 ResultInfo{who=null, request=6783, result=0, data=null} 到活动参数指定为non-null is null

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    //                                                                           ^^
    

    【讨论】:

    • 谢谢,这行得通,但我仍然需要了解 Kotlin 中的这些非空内容 :)
    • @Daniele 我很高兴能帮上忙,继续努力,你很快就会习惯的。
    • 谢谢!关闭排行榜窗口后遇到同样的问题。
    • 也谢谢你!这不仅帮助我对问题进行分类,而且帮助我理解错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2022-01-12
    • 2014-11-30
    • 1970-01-01
    相关资源
    最近更新 更多