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)
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)
}
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.
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)
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.
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
.
classe MyApp: Application () {
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
lateinit var instance: MyApp
private set
}
}
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)
Vous rencontrez une exception de pointeur null sur la méthode onCreate
de la nouvelle activité. Veuillez vérifier la méthode onCreate
.