JNIEXPORT jlong JNICALL Java_com_sharedpref1_test_savevalue
(JNIEnv *env, jobject ctx, jstring store, jstring key, jlong value);
jobject shared_preferences = (*env)->CallObjectMethod(env, ctx, (*env)->GetMethodID(env (*env)->FindClass(env, "android/content/Context"), "getSharedPreferences", "(L/java/lang/String;I)Landroid/content/SharedPreferences;"),
jstore,
1);
jobject preferences_editor = (*env)->CallObjectMethod(env, shared_preferences, (*env)->GetMethodID(env,
(*env)->FindClass(env, "android/content/SharedPreferences"), "editor", "()Landroid/content/SharedPreferences$Editor;"));
(*env)->CallObjectMethod(env, preferences_editor, (*env)->GetMethodID(env,
(*env)->FindClass(env, "android/content/SharedPreferences/Editor"), "putLong", "(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;"),
jkey,
value);
}
可以知道如何在Android上的jni中完成共享首选项。
答案 0 :(得分:1)
您的代码可能存在错误。 “ctx”不是Android上下文。相反,它是您调用Java类的Java“this”。除非您的调用类继承Context,否则您应该将Context实例作为附加参数传递。
除此之外,您应该拆分并可能错误检查函数调用,以使其更易读,更容易确定错误。
例如。
找到这个班级。
如果有效,找到方法。等等。