2017-11-10 44 views
5

W Kotlin ja to dwa nadrzędne Google funkcje logowania:Kotlin - IllegalArgumentException w zastąpiona metoda

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() 
      } 
     } 
    } 

, by sprawdzić, czy połączenie google zawodzi.

Problem polega na tym, że czasami, kiedy zamknąć okno dialogowe zawierające kont użytkowników, które wyskakujące gdy działalność jest uruchomiony

jak ten:

dialog

Otrzymuję IllegalArgumentException z następującym LogCat

E/Android Runtime: krytyczny wyjątek: główne procesu: pl .dancam.subscriptions, PID: 6346 wyjątek java.lang.RuntimeException: niepowodzenie dostarczania wyniku ResultInfo {who = null, request = 6783, result = 0, data = null} to activity {com.dancam.subscriptions/com.dancam.subscriptions .ActiveSubscriptions.Subscriptions_main}: java.lang.IllegalArgumentException: Parametr określony jako non-null ma wartość null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, dane parametru at android.app.ActivityThread.deliverResults (ActivityThread.java:4126) na android.app.ActivityThread.handleSendResult (ActivityThread.java:4169) na android.app.ActivityThread.-wrap20 (ActivityThread.java) w android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1552) na android.os.Handler.dispatchMessage (Handler.java:102) w android.os.Looper.loop (Looper.java:154) na android.app.ActivityThread.main (ActivityThread.java:6186) na java.lang.reflect.Method.invoke (Metoda natywna) at com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:889) na com.android.internal.os.ZygoteInit.main (ZygoteInit.java:779) Spowodowane przez: java.lang.IllegalArgumentException: Parametr określony jako non-null ma wartość null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, dane parametru at com.dancam.subscriptions.ActiveSubscriptions.Subscriptions_main.onActivityResult (Subscriptions_main.kt: 0) at android.app.Activity.dispatchActivityResult (Activity .java: 6937) na android.app.ActivityThread.deliverResults (ActivityThr ead.java:4122) na android.app.ActivityThread.handleSendResult (ActivityThread.java:4169) na android.app.ActivityThread.-wrap20 (ActivityThread.java) na android.app.ActivityThread $ H.handleMessage (ActivityThread .java: 1552) na android.os.Handler.dispatchMessage (Handler.java:102) na android.os.Looper.loop (Looper.java:154) na android.app.ActivityThread.main (ActivityThread.java : 6186) w java.lang.reflect.Method.invoke (metoda natywna) na com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:889) na com.android.internal.os. ZygoteInit.main (ZygoteInit.java:779)

wskazuje to na funkcję onActivityResult.

Próbowałem zmieniając

requestCode: Int 

do

requestCode: Int? 

Ale wtedy oczywiście pojawia się błąd, ponieważ funkcja nie jest taka sama jak ta, z To nadklasą.

Jak mogę to naprawić?

Odpowiedz

7

trzeba wspomnieć data jako null tak zrobić data: Intent? ponieważ data intencją może być null kiedy akcja zostanie anulowana lub nie wynik został wysłany

Awaria wynik dostarczania ResultInfo {kto = null, request = 6783, wynik = 0, data=null} na aktywność parametr określony jako non-null is null:

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

T Hanks, to działało, wciąż muszę się rozglądać za tymi niezerowymi rzeczami w Kotlinie :) – Daniele

+0

@Daniele Cieszę się, że mogłem pomóc i po prostu kontynuuję, przyzwyczaisz się już do tego bardzo szybko. –