Kotlin - 重写方法中的IllegalArgumentException

Dan*_*ele 11 android illegalargumentexception kotlin

在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()
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

像这个:

对话

我正在IllegalArgumentException使用以下logcat

E/AndroidRuntime:FATAL EXCEPTION:main进程:com.dancam.subscriptions,PID:6346 java.lang.RuntimeException:将结果ResultInfo {who = null,request = 6783,result = 0,data = null}传递给activity {失败.dancam.subscriptions/com.dancam.subscriptions.ActiveSubscriptions.Subscriptions_main}:java.lang.IllegalArgumentException:指定为非null的参数为null:方法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.app.AutT.Dop上运行android.os.Handler.dispatchMessage(Handler.java:102)(Looper.java:154).(ActivityThread.java:6186) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run中的java.lang.reflect.Method.invoke(Native Method)(zygoteInit.java:889)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)引起:java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal .Intrinsics.checkParameterIsNotNull,android.app.ActivityThread.deliverResults的android.app.Activity.dispatchActivityResult(Activity.java:6937)中com.dancam.subscriptions.ActiveSubscriptions.Subscriptions_main.onActivityResult(Subscriptions_main.kt:0)的参数数据( 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.app.Looper.loop(Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6186)的java. lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889)at c om.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

这指向了这个onActivityResult功能.

我试过改变

requestCode: Int
Run Code Online (Sandbox Code Playgroud)

requestCode: Int?
Run Code Online (Sandbox Code Playgroud)

但后来我显然得到一个错误,因为该函数与它的超类中的函数不同.

我该如何解决?

Pav*_*ngh 23

你需要一提的datanull这样做的data: Intent?,因为data意图可能是null,他的动作被取消或没有结果被送到

将结果ResultInfo {who = null,request = 6783,result = 0, data=null}发送到activity的参数指定为non-null is null:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//                                                                           ^^
Run Code Online (Sandbox Code Playgroud)

  • @Daniele我很高兴我能提供帮助并且继续前进,您很快就会习惯它。 (2认同)