嗨,我想Toast
在我的应用程序中随时随地从任何线程中提供给我。所以为了做到这一点,我扩展了Activity
课程:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
public class MyActivity extends Activity{
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
mHandler = new Handler();
super.onCreate(savedInstanceState);
}
private class ToastRunnable implements Runnable {
String mText;
public ToastRunnable(String text) {
mText = text;
}
public void run(){
Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
}
}
public void doToast(String msg) {
mHandler.post(new ToastRunnable(msg));
}
}
这样我的应用程序中的所有 Activity
课程现在都很简单
public class AppMain extends MyActivity {
//blah
}
我期望能够做的(在工作线程中)是这样的:
try{
MyActivity me = (MyActivity) Looper.getMainLooper().getThread();
me.doToast("Hello World");
}
catch (Exception ex){
Log.e("oh dear", ex.getMessage());
}
只要它Activity
是一个“ MyActivity
”它应该工作 - 但问题是--->Looper.getMainLooper().getThread();
没有返回MyActivity
给我,它让我哭了 - 我做错了什么?
: 编辑 :
一些背景来解释“为什么”我坚持这种类型的实施。
我需要能够向用户确认“HTTP POST”事件已经成功。现在。如果用户在 UI 表单上单击“确定”,那么它当时可能或可能没有互联网。如果它有互联网 - 一切都很好 - 它通过 HTTP POST 发布表单一切都很好.. 但如果有大多数人没有互联网(99.999% 的 Android 应用程序在这方面蹩脚/可怜/哀嚎,并且基本上没有为用户提供任何计划“b”,假设互联网始终存在 - 当它不存在时)
我的应用程序不会“跛脚(正如我所说的那样)” - 它确实有一个计划“b”,而是它“排队”发布事件并每 x 分钟重试一次......现在这是后台的一个静默线程......我在整个应用程序中进行大量用户交互我不知道用户将“在哪里”,但最终当队列/重试/队列/重试的 HTTP POST 返回“!成功!”时,我想将Toast
其作为消息发送给用户(例如:“您的表单已发送”)