Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. NoSuchMethodError with JNI during reading Shared Preferences in Android
Qt 6.11 is out! See what's new in the release blog

NoSuchMethodError with JNI during reading Shared Preferences in Android

Scheduled Pinned Locked Moved Solved Mobile and Embedded
2 Posts 1 Posters 893 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PowerNowP Offline
    PowerNowP Offline
    PowerNow
    wrote on last edited by PowerNow
    #1

    Hi, I want to use the Shared Preferences in Android to save persistently the User-ID, also if the User deinstalls the app. For this I'm using JNI/Qt5.12 but during reading the ID I get an error.

    https://developer.android.com/training/data-storage/shared-preferences.html

    Reading:

    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;
    

    jint id = sharedPref.callMethod<jint>("getInt","(Ljava/lang/String;I)I;", name.object<jstring>(), defId);

    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)

    I also don't understand the semantic issue:
    warning: instantiation of function QAndroidJniObject::callMethod required here, but no defenition is available

    Does someone know whats going wrong here? Thxs...

    PowerNowP 1 Reply Last reply
    0
    • PowerNowP PowerNow

      Hi, I want to use the Shared Preferences in Android to save persistently the User-ID, also if the User deinstalls the app. For this I'm using JNI/Qt5.12 but during reading the ID I get an error.

      https://developer.android.com/training/data-storage/shared-preferences.html

      Reading:

      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;
      

      jint id = sharedPref.callMethod<jint>("getInt","(Ljava/lang/String;I)I;", name.object<jstring>(), defId);

      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)

      I also don't understand the semantic issue:
      warning: instantiation of function QAndroidJniObject::callMethod required here, but no defenition is available

      Does someone know whats going wrong here? Thxs...

      PowerNowP Offline
      PowerNowP Offline
      PowerNow
      wrote on last edited by
      #2

      Now it works, the reason was the semicolon at the end which I overlooked.

      "(Ljava/lang/String;I)I;" -> "(Ljava/lang/String;I)I"

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved