我无法从我的Android服务类打印出简单的Toast消息:
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "thread is running", Toast.LENGTH_LONG).show();
}
});
}
此run方法位于实现Runnable
类的Service内部,因此我使用的是handler.post
,但是无法在内部run()
方法中使用任何内容。我认为handler.post
发布会有用,有什么不对?
其余代码和logcat打印输出在下面;
public class LotteryServer extends Service implements Runnable {
Handler handler = new Handler();
Context context = this;
@Override
public int onStartCommand(Intent intent, int flags, int startId){
super.onStartCommand(intent, startId, startId);
Toast.makeText(context, "My Service Started", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(context, "My Service Stopped", Toast.LENGTH_LONG).show();
}
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "thread is running", Toast.LENGTH_LONG).show();
}
});
}
}
logcat的;
02-21 15:09:33.279: E/AndroidRuntime(24038): FATAL EXCEPTION: main
02-21 15:09:33.279: E/AndroidRuntime(24038): java.lang.NullPointerException
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.widget.Toast.<init>(Toast.java:92)
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.widget.Toast.makeText(Toast.java:233)
02-21 15:09:33.279: E/AndroidRuntime(24038): at com.lottery.clientplayer.LotteryServer$1.run(LotteryServer.java:44)
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.os.Handler.handleCallback(Handler.java:605)
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.os.Looper.loop(Looper.java:137)
02-21 15:09:33.279: E/AndroidRuntime(24038): at android.app.ActivityThread.main(ActivityThread.java:4699)
02-21 15:09:33.279: E/AndroidRuntime(24038): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 15:09:33.279: E/AndroidRuntime(24038): at java.lang.reflect.Method.invoke(Method.java:511)
02-21 15:09:33.279: E/AndroidRuntime(24038): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
02-21 15:09:33.279: E/AndroidRuntime(24038): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
02-21 15:09:33.279: E/AndroidRuntime(24038): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
更改此
Toast.makeText(context, "thread is running", Toast.LENGTH_LONG).show();
到
Toast.makeText(LotteryServer.this, "thread is running", Toast.LENGTH_LONG).show();
答案 1 :(得分:0)
Toast.makeText(context, "thread is running", Toast.LENGTH_LONG).show();
相反上下文使用getApplicationContext()希望这可以工作..因为这将获得整个Context的scop。试试吧
答案 2 :(得分:0)
使用runOnUIThread(Runnable) 如果这不起作用,试试这个
Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
public void run() {
Toast(this, message, duration).show();
}
new Thread() {
public void run() {
mHandler.post(mUpdateResults);
}
}.start();