我的应用程序将启动一个线程来查询一些数据网络。我想显示敬酒消息时没有被发现,但我的申请老是死机。

我已经使用的应用程序上下文从线程内尝试,像这样:

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

我也试着与吐司呼叫建立一个Runnable并从线程(吐司呼叫在此可运行使用活性作为第一个参数)调用runOnUiThread(可运行)。

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

有帮助吗?

解决方案

尝试内部张贴到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();

其他提示

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

您应该使用像屋大维Damiean一个的AsyncTask提到,但这里的使用runOnUiThread如果你设置一些代码上使用:

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

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

尝试在Activity类实施延伸“处理程序”的一类,并从其他线程发送消息给它。更详细地说明此:

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

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

如果你从你的活动类运行处理,你可以设置上下文仅通过引用您的活动的。这就像这样:

final Runnable showToastMessage = new Runnable() {
    public void run() {
        Toast.makeText(YourActivity.this, "Message", Toast.LENGTH_SHORT).show();
    }
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top