2012-05-30 85 views
-1

嗨在我的應用程序中有8個按鈕。單擊每個按鈕時單擊onclickListener()將字符串寫入套接字。現在我想,當我按住按鈕的字符串必須寫入一個循環。這是我想要做的。Android:在onTouchListener()中循環執行線程

bLeft.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent event) { 
      // TODO Auto-generated method stub 
      MyThread start = new MyThread(); 
      boolean isReleased = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL; 
      boolean isPressed = event.getAction() == MotionEvent.ACTION_DOWN; 

     while (isPressed) { 

       start.execute(ip, "left"); 

       break; 
     } 
      return false; 
     } 
    }); 

不知何故,我不知道爲什麼它不工作。開始,執行(字符串,字符串)執行AsyncTask類中的線程來創建套接字和輸出流。

回答

0
bLeft.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View arg0, MotionEvent event) { 
     // TODO Auto-generated method stub 
     MyThread start = new MyThread(); 
     boolean isReleased = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL; 
     boolean isPressed = event.getAction() == MotionEvent.ACTION_DOWN; 

    while (isPressed) { 

      start.execute(ip, "left"); 

      break; 
    } 
     return false; 
    } 
}); 

首先,isReleased不會被使用,所以擺脫這個變量,這使事情變得更加複雜。

秒的事情以確保它在例如while循環結束:

`Log.d(「debugText」,「我在,而」)」

,並記錄該按下狀態。這將使調試時更清晰。

另請參閱以下關於painless Threading的Android文檔。確保你使用的是正確的東西。

調試後,您可能會明白爲什麼它沒有執行。如果不是,則需要更多信息。

+0

實際上它正在執行,但發送的字符串,這意味着它正在執行,但該服務器後,應用程序崩潰按下按鈕,順便說一句,我使用的AsyncTask – user1422066

+0

那麼,什麼是後應用程序崩潰你準確地發送到服務器?你有任何代碼?或者對於這個問題的堆棧跟蹤? – QVDev

+0

我正在發送字符串到服務器上我想要的按鈕事件,如果用戶按下並按住該按鈕,字符串應該按照時間連續發送到服務器。 – user1422066

0

一個asynchronos任務只能執行一次...你試圖在一個while循環中使用它......這意味着你試圖反覆使用它......你需要重新初始化每次迭代的開始while循環...

while (ispressed){ 
     start = new YourAsyncTask(); 
     start.execute(params); 
}