JNI и статический интерфейс - PullRequest
1 голос
/ 11 мая 2011

Отличается ли "сигнатура метода" JNI, если определен метод для возврата (статический) интерфейс?

В моем классе Java у меня есть этот метод:

public SharedPreferences.Editor getSharedPrefsEditor() {
    return mActivity.getPreferences(Context.MODE_PRIVATE).edit();
}

SharedPreferences.Editor - статический интерфейс в SharedPreferences.

В моем C ++ JNI-коде я делаю это:

// 'env' is the java environment that JNI passes to us
// 'jObject' is the one that JNI passes to us (along with env)
jclass javaCallerClass = env->GetObjectClass(jObject);
jmethodID methodId_getSharedPrefsEditor = env->GetMethodID(
    javaCallerClass,
    "getSharedPrefsEditor",
    "()Landroid/content/SharedPreferences/Editor;");

По какой-то странной причине это не работает. Он компилируется, но во время выполнения я получаю это:

DEBUG / dalvikvm (19020): GetMethodID: метод не найден: Lcom / mangotaster / madballs / MyRenderer; .getSharedPrefsEditor :() Landroid / содержание / SharedPreferences / редактор;

Я без проблем вызываю другие методы в этом классе.

Единственное изменение, похоже, возвращаемое значение. Я пытался вызвать функцию edit () прямо из кода JNI, но получил ту же ошибку - из-за этого я считаю, что моя подпись функции "() Landroid / content / SharedPreferences / Editor;" действительно неправильно.

Дополнительная информация о SharedPreferences класс.

Ответы [ 2 ]

10 голосов
/ 11 мая 2011

Вложенные / внутренние классы не используют стандартную номенклатуру пространства имен в сигнатурах JNI.Внутренний класс фактически переводится в обычный класс на том же уровне, что и внешний класс, компилятором Java с именем «Outer $ Inner».Я думаю, что вы хотите "()Landroid/content/SharedPreferences$Editor;".

4 голосов
/ 12 мая 2011

Не нужно догадываться об этом или спрашивать на форумах ;-) javap -s сообщит вам правильную строку подписи JNI для любого метода Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...