0
0

More than 1 year has passed since last update.

JNIでNullableなint値を受け取り、jobjectからint値に変換する方法

Posted at

概要

JNIを使用したAndroidのアプリをKotlinで作成しているとき、JNIの関数にNullableのKotlinのInt値を渡したいということがあった。
Nullableでない値を渡す場合であればネイティブ側でjintとして受け取るところなのだが、Nullableの場合だとエラーが発生してjintは使用できなかった。
そのため、Nullableな値をネイティブ側でjobjectとして受け取った後にjobjectからint値に変換するということを行ったのでその方法を記載する。

JNIでjobjectからint値に変換する方法

以下のようにすることでjobjectをint値に変換することができる。


// JNI関数の定義はKotlin側の別の場所で以下のように定義されている
external fun sampleFunc(value: Int?): Int

// ネイティブ側のコード
// サンプルなので関数名は適当かつ、int値を返すだけのコード
JNIEXPORT jint JNICALL
con_example_app_sampleFunc(JNIEnv *env, jobject nullableValue) {
    if (nullableValue != nullptr) {
        auto intClass = env->FindClass("java/lang/Integer");
        auto intValueMID = env->GetMethodID(intClass, "intValue", "()I");
        auto intValue = env->CallIntMethod(nullableValue, intValueMID);
        return intValue
    }
    return -1;
}

また、今回はKotlinのInt値が渡したが応用としてCallIntMethodCallFloatMethodCallBooleanMethodなどの別の関数にすることでFloat値やBool値の場合でも同じような事ができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0