我想使用Android中的“共享首选项”永久保存用户ID,即使用户卸载了该应用程序也是如此。为此,我使用的是JNI / Qt5.12,但是在读取ID时出现错误。
https://developer.android.com/training/data-storage/shared-preferences.html
阅读:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);
JNI:
jint mp = QAndroidJniObject::getStaticField<jint>("android/content/Context", "MODE_PRIVATE");
QAndroidJniObject name = QAndroidJniObject::fromString("test");
QAndroidJniObject activity = QtAndroid::androidActivity();
QAndroidJniObject sharedPref = activity.callObjectMethod("getPreferences", "(I)Landroid/content/SharedPreferences;", mp);
jint defId = 2;
// this line throws
jint id = sharedPref.callMethod<jint>("getInt","(Ljava/lang/String;I)I;", name.object<jstring>(), defId);
Stacktrace:
W/System.err(10285): java.lang.NoSuchMethodError: no non-static method "Landroid/app/SharedPreferencesImpl;.getInt(Ljava/lang/String;I)I;"
W/System.err(10285): at org.qtproject.qt5.android.QtNative.startQtApplication(Native Method)
W/System.err(10285): at org.qtproject.qt5.android.QtNative$6.run(QtNative.java:365)
W/System.err(10285): at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61)
W/System.err(10285): at java.lang.Thread.run(Thread.java:818)
我也不了解语义问题: 警告:此处需要函数QAndroidJniObject :: callMethod的实例化,但没有定义
有人知道这里出了什么问题吗?谢谢...
答案 0 :(得分:1)
失败的原因是一个很小的事情:"(Ljava/lang/String;I)I;"
中要加一个分号-应该改为"(Ljava/lang/String;I)I"
(末尾没有分号)。
关于警告:您可以忽略它们,只是代码模型无法完全理解这些方法的定义。