2012-01-07 25 views
1

我有一個服務,它包含一個Timer和TimerTask,用於在一段時間內從Webservice接收數據。除了吐司之外,一切正常。我想在procSendMapMovements中向用戶展示Toast,但我得到異常。我如何在其中使用吐司?如何將Toast放入服務的Runnable中?

class taskSendMapMovements extends TimerTask { 
     @Override 
     public void run() { 
      hhSendMapMovements.sendEmptyMessage(0); 
     } 
    }; 



    // ///////////////////// 

    final Runnable rSendMapMovements = new Runnable() 
    { 
     public void run() 
     { 
      procSendMapMovements(); 
     } 
    }; 

    final Handler hhSendMapMovements = new Handler(new Callback() { 
     @Override 
     public boolean handleMessage(Message msg) { 
      performOnBackgroundThread(rSendMapMovements); 

      return false; 
     } 
    }); 

    // ///////////////////// 

    public void procSendMapMovements() { 
     try { 


      Toast.makeText(SrvDataExchange.this, 
        "some texts" 
        Toast.LENGTH_SHORT).show(); 
// exception here 
// my process 


     } catch (Exception e) { 


     } 
    } 


@Override 
    public void onStart(Intent intent, int startId) { 
     try { 



      timerSendMapMovements = new Timer(); 


      timerSendMapMovements 
         .schedule(new taskSendMapMovements(), 
           10*60*1000, 
           10*60*1000); 

      // 

     } catch (NumberFormatException e) { 
      Toast.makeText(this, "error running service: " + e.getMessage(), 
        Toast.LENGTH_SHORT).show(); 
     } catch (Exception e) { 
      Toast.makeText(this, "error running service: " + e.getMessage(), 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 



public static Thread performOnBackgroundThread(final Runnable runnable) { 
     final Thread t = new Thread() { 
      @Override 
      public void run() { 
       try { 
        runnable.run(); 
       } finally { 

       } 
      } 
     }; 
     t.start(); 
     return t; 
    } 
+0

你有什麼異常? – 2012-01-07 11:47:08

+0

java.lang.RuntimeException:無法在沒有調用Looper.prepare() – breceivemail 2012-01-07 11:50:03

+0

而沒有Toast的線程中創建處理程序我的進程完全按照線程完成//我的進程 – breceivemail 2012-01-07 11:54:00

回答

2

創建一個處理程序來顯示吐司。

使用下列內容:

要顯示敬酒呼叫

//printToast.sendEmptyMessage();//If you dont want to send no paramter 
//if you want to send some object to handler 
/* 
Message msg=printToast.obtainMessage(); 
msg.obj=objToSent; 
printToast.sendMessage(msg); 
*/ 
final Handler printToast= new Handler(new Callback() { 
     @Override 
     public boolean handleMessage(Message msg) { 
      Toast.makeText....; 

     } 
    }); 
+0

請發送示例代碼 – breceivemail 2012-01-07 12:03:24

+0

請查看我更新的帖子。 – jeet 2012-01-07 12:11:42

+0

非常感謝! – breceivemail 2012-01-07 12:36:10

1

**

Handler printToast= new Handler(new Callback() { 

     @Override 
     public boolean handleMessage(Message msg) { 
      Toast.makeText....; 
     } 
    }); 
your Runnable 
{ 

    run() 
    { 

     do what ever you want 
     printToast.sendMessage(printToast.obtainMessage()); 
     } 

} 

**

相關問題