java - 安卓 :shared preference in jni

标签 java android java-native-interface sharedpreferences

在我的 android 应用程序中需要访问两个应用程序之间的共享内存,我知道 android 内核不像 Linux 内核那样实现共享内存概念,所以我在 android 中选择了共享首选项但我需要实现它通过 JNI 而不是在 java 部分我试图在 jni 中创建共享首选项但我无法正确获取它 这是我的代码

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 中完成共享偏好。

最佳答案

您的代码中可能存在错误。 “ctx”不是 Android 上下文。相反,它是调用 Java 类的 Java“this”。除非您的调用类继承了 Context,否则您应该将 Context 实例作为附加参数传递给它。

除此之外,您应该拆分并可能对您的函数调用进行错误检查,以使其更具可读性并更容易确定错误。 例如。
找到类。
如果它有效,找到方法。等等。

关于java - 安卓 :shared preference in jni,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16644416/

相关文章:

java - 为什么 Spring Value 中的默认值不能防止 NULL 错误?

android - 转换为新的 firebase - 枚举

android - 将多个数据传递给 Activity ?

android - 如何以纯 Android Studio 方式编译我的 C++ 库(无需自行指定任何 .mk 文件)

android - 在 android native C++ 中使用 Facemark opencv contrib

java - 使用分隔符分隔模式

java - 编译代码时出现错误的操作数错误

java - Activity结束后如何结束接口(interface)回调

java - 如何与 Sprite 一起旋转 vector ?

java - 从java调用JNI编写的函数而不加载DLL