与WebService一起使用时无法显示Toast消息

时间:2011-05-18 18:02:27

标签: android web-services toast

当发出对Web服务的调用时,我需要向用户显示一条消息“与服务器通信...请等待几秒钟”。目前我正在使用Toast.makeText来显示消息。出于某种原因,我没有看到弹出的消息。但有趣的是,当我评论Web服务方法调用时,我看到了Toast消息。

Toast.makeText(this, "Communicating to the Server...Please wait for few seconds",      
                     Toast.LENGTH_SHORT).show();

//webservice code goes here...

或满足此要求的任何其他替代方案也可以。

4 个答案:

答案 0 :(得分:1)

您是否考虑过使用AysncTask。使用AsyncTask,您可以在onPreExecute()上显示包含邮件的对话框。

答案 1 :(得分:0)

不要混用UI代码和网络代码。请参阅:http://developer.android.com/resources/articles/painless-threading.html

答案 2 :(得分:0)

您可以使用AsyncTask来投放您的服务,并在Toast中显示onPreExecute

或者您可以使用普通Thread但是,您需要使用Handler。方法如下:

class MyActivity extends Activity
{
    final Handler mHandler;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(...);
        mHandler = new Handler();

        ...
    }

    void showToast(final String text)
    {
        mHandler.post(new Runnable()
        {               
            @Override
            public void run()
            {
                Toast.makeText(MyActivity.this, text, Toast.LENGTH_LONG).show();
            }
         });
    }

    class MyThread implements Runnable
    {
        @Override
        public void run()
        {
            showToast("your custom text");
            //your service code
        }
    }           
}

以下是您启动该主题的方法:

Thread thread = new Thread(new MyThread());
thread.run();

答案 3 :(得分:0)

问题是,一旦您进行阻止Web服务调用,UI线程就会被阻止,因此它永远不会使用Toast消息进行更新。到它返回时,toast消息的时间已经过期。

使用AsyncTask在线程中运行您的Web服务调用,或者只创建一个类似的线程

new Thread(new Runnable() {
  public void run() {
    // WS call here

  }
}).start();

请注意,如果您创建自己的线程,则只能从UI线程更新UI,因此您需要使用Handler.post()或sendMessage()在UI线程上运行UI更新。

http://developer.android.com/reference/android/os/AsyncTask.html http://developer.android.com/reference/android/os/Handler.html

相关问题