web-dev-qa-db-fra.com

Intentions à Kotlin

Donc, je sais qu’en Java, nous l’utilisons pour lancer une nouvelle variable Activity

Intent intent = new Intent(this, SomeActivity.class);
startActivity(intent);

Mais j'écris un projet en utilisant Kotlin, donc à Kotlin c'est comme 

val intent = Intent(this,SomeActivity::class.Java)
startActivity(intent)

Mais ça plante avec problème 

FATAL EXCEPTION: main
Process: com.pashabred.passlin, PID: 15243
                                                                           Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pashabred.passlin/com.pashabred.passlin.Enterring}: kotlin.KotlinNullPointerException
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2325)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
    at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:135)
    at Android.app.ActivityThread.main(ActivityThread.Java:5254)
    at Java.lang.reflect.Method.invoke(Native Method)
    at Java.lang.reflect.Method.invoke(Method.Java:372)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
                                                                            Caused by: kotlin.KotlinNullPointerException
    at com.pashabred.passlin.Enterring.onCreate(Enterring.kt:17)
    at Android.app.Activity.performCreate(Activity.Java:5990)
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1106)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2278)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
    at Android.app.ActivityThread.access$800(ActivityThread.Java:151) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:135) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5254) 
    at Java.lang.reflect.Method.invoke(Native Method) 
    at Java.lang.reflect.Method.invoke(Method.Java:372) 
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698) 
14
Pavel Bredelev

Assurez-vous d'avoir ( point d'interrogation ):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

Au lieu:

override fun onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
}
12
klimat

Les intentions d'utilisation de Kotlin pour Android sont presque identiques, il suffit simplement de modifier légèrement la syntaxe ci-dessous.

val intent = Intent(this,HelloActivity::class.Java) startActivity(intent)

Exception que vous obtenez est une exception pointeur null dans votre méthode onCreate sur l'activité, veuillez cocher la même chose.

24
AaRiF

Le moyen le plus court et le plus simple que j'utilise pour ouvrir une nouvelle activité 

startActivity(Intent(this@MainActivity, NextActivity::class.Java))

P.S: L’un des principaux points à noter ici est que Intent () attend un packageContext en tant que premier paramètre et que l’utilisation de this génère toujours une erreur. 

Par conséquent, vous devez définir explicitement le nom de la classe. Comme indiqué dans la ligne ci-dessus (this @ MainActivity) 

6
Gaurav Sarma

Comme expliqué à cette page , Anko fournit également certaines fonctions de Nice permettant de naviguer vers une autre activité sans avoir besoin de créer une intention, d'ajouter des extras ou d'appeler la fonction. 

Tout peut être fait en une seule ligne:

startActivity<DetailActivity>("id" to 2, "name" to "Kotlin")

Cela créera un ensemble d’extras pour l’intention avec les valeurs spécifiées par la liste de paires que la fonction reçoit en tant que paramètre.

4
Mithilesh Gautam

Les intentions dans Android kotlin peuvent être utilisées comme indiqué ci-dessous.

val intent = Intent(this,YourActivity::class.Java)
startActivity(intent)

En outre, l'exception que vous obtenez existe dans votre méthode onCreate.

1
Android.Dev17
  1. Créez une classe Singleton pour une instance d'application, par exemple:

classe MyApp: Application () {

override fun onCreate() {
    super.onCreate()
    instance = this
}

companion object {
    lateinit var instance: MyApp
        private set
}

  1. puis après l'appel où vous avez besoin d'instance d'objet d'application. par exemple :

    val intent: Intent = Intent(MyApp.instance, DestinationActivity::class.Java);
    MyApp.instance.startActivity(intent)
    
0
rakesh rajput

Vous rencontrez une exception de pointeur null sur la méthode onCreate de la nouvelle activité. Veuillez vérifier la méthode onCreate.

0
Ruchira Randana