Ich habe einen Dienst, der eine C-Funktion über JNI aufruft. Diese Funktion erzeugt dann eine pthread
und verbindet sie mit der JVM. Ich rufe eine Java-Methode von dieser pthread
, die eine Toast
Benachrichtigung veröffentlichen sollte. Leider, sobald die Toast
Benachrichtigung aufgerufen wird, bekomme ich eine Nullzeiger Ausnahme.Android - Null-Zeiger auf Toast Anruf
Hier ist die Methode, die den Toast
Anruf in meiner Dienst-Klasse verarbeitet:
public void showToast(final String msg) {
final Context MyContext = this;
Handler h = new Handler(MyContext.getMainLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast myToast = Toast.makeText(MyContext, msg, Toast.LENGTH_SHORT);
myToast.show();
}
});
}
Was die Null-Zeiger Ausnahme verursacht sein könnte, und wie kann ich es beheben?
Wird versucht, den Kontext aus der C-Funktion zu nehmen? Hier
ist die Fehlermeldung
W/dalvikvm(4010): JNI WARNING: JNI method called with exception pending
W/dalvikvm(4010): in Ldalvik/system/NativeStart;.run:()V (CallVoidMethod)
W/dalvikvm(4010): Pending exception is:
I/dalvikvm(4010): java.lang.NullPointerException:
I/dalvikvm(4010): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)
Mit getApplicationContext
:
I/dalvikvm(6242): java.lang.NullPointerException:
I/dalvikvm(6242): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
Können Sie die genaue Fehlermeldung posten? –
Haben Sie versucht, getApplicationContext() anstelle von 'this' zu verwenden? –
Ja.Sie sollten getApplicationContext() als @ ρяσѕρєяK verwenden. –