2012-08-22 13 views
14

Ich erhalte diesen Fehler JNI ERROR (app Fehler): Zugriff auf veraltete globale Referenz Wenn ich betreiben meinen App in Android OS v4, aber wenn ich das laufen gleiche Anwendung in Android v2.3 Ich bekomme diesen Fehler nicht.Fehler: JNI ERROR (app Fehler): Zugriff auf veraltete globale Referenz

Dieser Fehler tritt an dem Punkt, wo ich AsyncTask Klasse nennen, wo ich ein String-Array als Argument übergeben

Wer kann mir helfen ??

+2

Ich erinnere mich an das Lesen in [Google Freigabeerklärung für Entwickler] (http://android-developers.blogspot.ie/2011/11/jni-local-reference-changes-in-ics.html) dass ICS eine strengere Verifizierung von möglichen Fehlern mit mehreren Threads haben wird, vielleicht ist Ihnen das gerade aufgefallen? – skolima

Antwort

14

Dieser Fehler tritt auf, wenn Sie eine Methode mit einem falschen Parametertyp aufrufen.

Stellen Sie sicher, dass Ihre Methodensignatur genau dem entspricht, was Sie übergeben. Für ein String-Array:

jmethodID mid = env->GetMethodID(cls, methodName, "([Ljava/lang/String;)V"); 

Wenn Sie es selbst schaffen, wäre es etwa so aussehen:

jclass stringCls = env->FindClass("java/lang/String"); 
jobjectArray mStringArray = env->NewObjectArray(mSize, stringCls, NULL); 

In Ihrem speziellen Fall sind Sie höchstwahrscheinlich nicht den Absturz auf Android zu sehen 2.3, weil Sie rufen AsyncTask.execute() auf, das nicht verfügbar war, bis API 11 (Android 3.0) und Ihre jmethodID null ist. (Es ist eine gute Idee, jclass und jmethodID nach dem Abrufen immer auf Null zu überprüfen)

+0

Nur für zukünftige Referenz falsch geschrieben 'jlong' mit' long', was in der gleichen Fehler – ZdaR

2

Dieser Fehler tritt auf, wenn Sie eine Methode mit einem falschen Parametertyp aufrufen.

Zusätzlich, in diesem Fall können Sie die native Methode auf Java-Code anders als den systemeigenen Code registrieren. Der Unterschied kann sein, dass Sie mehr oder weniger Parameter zwischen dem Java-Code und dem nativen Code deklarieren.

1
+0

@Crossle ... mate im neuen Android und mit dem gleichen Problem konfrontiert http://stackoverflow.com/questions/21423036/sqlite3- exception-database-disk-image-is-malformed pls sagen, wie kann ich Ihren Code implementieren .. im berichtigen es aus den letzten 3 Wochen :( – Gattsu