だから、Javaではこれを使って新しいActivity
を起動することを知っている
Intent intent = new Intent(this, SomeActivity.class);
startActivity(intent);
しかし、私はKotlinを使用してプロジェクトを書いているので、Kotlinでは次のようになります
val intent = Intent(this,SomeActivity::class.Java)
startActivity(intent)
しかし、それは問題でクラッシュします
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)
(疑問符)があることを確認してください:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
代わりに:
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
}
AndroidにKotlinを使用するインテントはほとんど同じですが、以下のように構文を少し変更するだけです。
val intent = Intent(this,HelloActivity::class.Java) startActivity(intent)
取得している例外は、アクティビティのonCreate
メソッドのnullポインター例外です。同じことを確認してください。
新しいアクティビティを開くために使用する最短かつ最も簡単な方法
startActivity(Intent(this@MainActivity, NextActivity::class.Java))
追伸:ここで注意すべき主なポイントの1つは、Intent()が最初のパラメーターとしてpackageContextを期待しているため、単にthisを使用するとエラーがスローされることです。
したがって、クラス名を明示的に定義する必要があります。上記の行に示すように(this @ MainActivity)
このページ で説明したように、Ankoは、インテントを作成したり、エクストラを追加したり、関数を呼び出したりすることなく、他のアクティビティに移動するためのNice関数も提供します。
すべてを1行で実行できます。
startActivity<DetailActivity>("id" to 2, "name" to "Kotlin")
これにより、関数がパラメーターとして受け取るペアのリストで指定された値を使用して、インテントの追加セットが作成されます。
Android kotlinのインテントは、以下のように使用できます。
val intent = Intent(this,YourActivity::class.Java)
startActivity(intent)
さらに、取得している例外はonCreate
メソッドに存在します。
クラスMyApp:Application(){
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
lateinit var instance: MyApp
private set
}
}
次に、アプリケーションオブジェクトインスタンスが必要な場所で呼び出した後。例えば :
val intent: Intent = Intent(MyApp.instance, DestinationActivity::class.Java);
MyApp.instance.startActivity(intent)
新しいアクティビティのonCreate
メソッドでnullポインター例外が発生しています。 onCreate
メソッドを確認してください。