2013-05-20 129 views
3

在我的android應用程序中需要訪問兩個應用程序之間的共享內存,我知道android內核並不像Linux內核那樣實現共享內存的概念,所以我選擇了android中的共享偏好但我需要通過JNI來實現這個不是Java的部分我試圖創建JNI共享的偏好,但我不能讓它正確 這是我的代碼Android: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); 


    } 

可以在任何知道如何做共享偏好JNI上機器人。

+0

你有沒有找到任何方式做相同的共享首選項對象創建在C + + ndk,我也面臨同樣的問題,如果你找到了請更新我 –

回答

1

您的代碼可能存在錯誤。 「ctx」不是Android環境。相反,它是Java調用Java類的「this」。除非您的調用類繼承了Context,否則您應該將Context實例作爲附加參數傳遞給它。

除此之外,您應該拆分並可能錯誤檢查您的函數調用,以使其更易讀並且錯誤更容易確定。 例如
找到課程。
如果它有效,找到方法。等等。