Wie zu verwenden JNI registerNatives innerhalb der c++ - Klasse?

Ich habe eine c++ - Klasse namens androidGPS mit öffentlichen Methoden und Variablen. Innerhalb dieser Klasse bin ich mit JNI Aufrufe einige java-code. Aber ich bin stecken in der registerNatives Funktion.

Meine c++ - Klasse hat dieses void-Methode:

void LocationChanged(JNIEnv* env, jobject object, jstring paramsString);

Umgesetzt, die in dieser Weise:

void androidGPS::LocationChanged(JNIEnv*, jobject, jstring paramsString)
{
    const char * nativeString = currEnv->GetStringUTFChars(paramsString, 0);

    QString qstring(nativeString);
    QStringList res;
    res << qstring;
    emit newReadAvailable(res);
}

Die Java-Klasse, die ich versuche zu verknüpfen, hat die folgende Methode:

public static native void sndonLocationChanged(String currLocation);

Sage ich das JNINativeMethods als lokale variable vor dem Aufruf der register Eingeborenen wie:

JNINativeMethod methods[] =
{
    {
         "sndonLocationChanged",
         "(Ljava/lang/String;)V",
         (void *)&androidGPS::LocationChanged
    }
};

Register einheimischen nennen, ist dies:

int numMethods;
    numMethods = sizeof(methods) / sizeof(methods[0]);
    if (currEnv->RegisterNatives(listenerClass, methods, numMethods) < 0)
    {
        if (currEnv->ExceptionOccurred())
        {
            classError = true;
            emit error("JNI--Error running RegisterNatives");
            stopGPSService();
            return false; //Return with error
        }
        else
        {
            emit error("JNI--Error running RegisterNatives");
            stopGPSService();
            return false; //Return with error
        }
    }

Der compiler gibt mir die Warnung:

Warnung: Konvertierung von 'void
(androidGPS::)(JNIEnv, _jobject*,
_jstring*)' to 'void*'

Den c++ - Anwendung stürzt ab, wenn ich die Funktion aufrufen sndonLocationChanged() in der Klasse über JNI. Ich kann nicht sehen, die Fehler in c++, aber der Dalvik nicht ein Fehler generiert.

Denke ich, ist, weil ich den Aufruf nicht richtig registerNatives oder nicht deklarieren, richtig die Methoden (daher die Warnung).

Wenn ich erkläre LocationChanged statische als:

static jboolean LocationChanged(JNIEnv* env, jobject object, jstring paramsString);

Es nicht scheitern, aber ich kann nicht passieren paramsString in Klasse Mitglieder!

Irgendeine Idee, wie ich das beheben kann?

Vielen Dank,

Carlos.

InformationsquelleAutor QLands | 2011-05-17
Schreibe einen Kommentar