2012-01-07 20 views
1

私は時間のWebserviceからデータを受信するためのTimerとTimerTaskを含むサービスを持っています。トースト以外はすべて正常に動作します。私はprocSendMapMovementsでユーザーにトーストを見せたいが、例外が出る。どのようにトーストを使用できますか?サービスの実行可能ファイルにToastを挿入するにはどうすればよいですか?

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

? –

+0

java.lang.RuntimeException:Looper.prepare()を呼び出していないスレッド内でハンドラを作成することはできません。 – breceivemail

+0

Toastプロセスは完全に//私のプロセスで終了しました – breceivemail

答えて

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

+0

私の最新の記事をご覧ください。 – jeet

+0

ありがとう! – breceivemail

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

} 

**

関連する問題