在阅读Android中,nosuchmethoderror与JNI在QT上与JNI

NoSuchMethodError with JNI on Qt during reading Shared Preferences in Android

本文关键字:JNI QT 上与 nosuchmethoderror Android      更新时间:2023-10-16

我想使用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此处需要,但是没有漏洞可用

有人知道这里怎么了吗?thxs ...

此失败是一件很小的事情:"(Ljava/lang/String;I)I;"中的额外的半隆 - 应该是 "(Ljava/lang/String;I)I"(最后没有半隆)。

关于警告:您可以忽略它们,它只是代码模型无法完全理解这些方法的定义。