JNI:使用 android.os.Bundle 实例访问 'keySet' 方法
JNI: Access to 'keySet' method with android.os.Bundle instance
我试图在启动 activity 时从 Intent 获取额外捆绑包中使用的密钥列表。额外的包正在从意图中返回,但是当我尝试获取键集时,jmethodID
返回 null:
JNIEnv* jni = ...;
jobject extraBundle = ...; // from 'Intent.getExtras()'
jclass bundleClass = jni->GetObjectClass(extraBundle);
jmethodID keySetMethod = jni->GetMethodID(bundleClass, "keySet", "()Ljava/util/Set"); // keySetMethod == nullptr
keySet
方法来自 android.os.BaseBundle
,android.os.Bundle
派生自。我已经使用 java -s android.os.BaseBundle
验证了签名。我试过使用 jni->FindClass("android/os/BaseBundle")
,并将其用作 jclass
,但结果相同。
我做错了什么吗?
class 签名不正确。
当你指定一个对象时,你必须使用这种格式 Lobject;
.
jmethodID keySetMethod = jni->GetMethodID(bundleClass, "keySet", "(V)Ljava/util/Set;");
我试图在启动 activity 时从 Intent 获取额外捆绑包中使用的密钥列表。额外的包正在从意图中返回,但是当我尝试获取键集时,jmethodID
返回 null:
JNIEnv* jni = ...;
jobject extraBundle = ...; // from 'Intent.getExtras()'
jclass bundleClass = jni->GetObjectClass(extraBundle);
jmethodID keySetMethod = jni->GetMethodID(bundleClass, "keySet", "()Ljava/util/Set"); // keySetMethod == nullptr
keySet
方法来自 android.os.BaseBundle
,android.os.Bundle
派生自。我已经使用 java -s android.os.BaseBundle
验证了签名。我试过使用 jni->FindClass("android/os/BaseBundle")
,并将其用作 jclass
,但结果相同。
我做错了什么吗?
class 签名不正确。
当你指定一个对象时,你必须使用这种格式 Lobject;
.
jmethodID keySetMethod = jni->GetMethodID(bundleClass, "keySet", "(V)Ljava/util/Set;");