从线程发布Toast消息

时间:2010-11-17 22:27:19

标签: android multithreading toast

我的应用程序启动一个线程来查询Web以获取某些数据。我想在找不到任何内容时显示Toast消息,但我的应用程序总是崩溃。

我已尝试在线程中使用应用程序Context,如下所示:

Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();

我也尝试使用Toast调用创建一个Runnable并从Thread调用runOnUiThread(runnable)(此runnable中的Toast调用使用Activity作为第一个参数)。

有没有人对如何做到这一点有任何想法?

4 个答案:

答案 0 :(得分:22)

尝试将内部发布到Handler对象。

final 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();

答案 1 :(得分:4)

Toast.makeText().show()肯定需要在UI线程上运行。

你应该使用Octavian Damiean提到的AsyncTask,但如果你开始使用runOnUiThread,那么这里有一些代码:

    public void showToastFromBackground(final String message) {
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            Toast.makeText(this, message, Toast.LENGTH_LONG).show();
        }
    });
}

答案 2 :(得分:3)

尝试在Activity类中实现一个扩展“Handler”的类,并从另一个线程向它发送一条消息。这里详细解释:

http://www.anddev.org/the_pizza_timer_-_threading-drawing_on_canvas-t126.html

请问这样的问题,包括你得到的堆栈跟踪。

答案 3 :(得分:1)

如果您正在从Activity类运行Handler,您可以通过引用您的Activity的.this来设置上下文,如下所示:

final Runnable showToastMessage = new Runnable() {
    public void run() {
        Toast.makeText(YourActivity.this, "Message", Toast.LENGTH_SHORT).show();
    }
};