我有一個服務它通過JNI調用C函數。然後該函數會生成一個pthread
並將其附加到JVM。我從這個pthread
調用Java方法,該方法應該發佈Toast
通知。不幸的是,一旦Toast
通知被調用,我得到一個空指針異常。Android - Toast調用的空指針
這是處理我的服務類Toast
調用方法:
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();
}
});
}
什麼可能會導致空指針異常,我該如何解決?
它試圖從C函數中獲取上下文失敗嗎?
以下是錯誤消息
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)
使用getApplicationContext
:
I/dalvikvm(6242): java.lang.NullPointerException:
I/dalvikvm(6242): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
您可以發佈確切的錯誤消息調用訪問適當的範圍內? –
您是否嘗試過使用getApplicationContext()而不是'this'? –
是的。你應該使用getApplicationContext()作爲@ρяσѕρєяK提到的。 –