2013-04-23 71 views
0

我試圖多次調用我的函數,其中包含可運行對象。 有人可以告訴我我做錯了什麼?android多次調用runnable對象

 handler = new Handler(); 

     sButton.setOnClickListener(new View.OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 
       rounds = new Integer(et.getText().toString()); 
      // handler.removeCallbacksAndMessages(null); 
       for (int j = 0; j <= rounds; j ++) 
       { 
        f(); 
       } 
      } 
     }); 
    } 

    public void f() 
    { 
     r = new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       mp = MediaPlayer.create(Box.this, R.drawable.sound1); 
       mp.setLooping(false); 
       mp.setVolume(1.0f, 1.0f); 
       mp.start(); 
       handler.postDelayed(this, 3000); 
      } 
     }; 
     handler.postDelayed(r, 4000); 
     mp.stop(); 

在此先感謝

+1

什麼是錯誤您收到? – Gunaseelan 2013-04-23 12:38:27

+0

加載keycharmap文件時出錯。 – user2249145 2013-04-23 12:42:23

+0

你正在做很多事情錯誤:S ...你正在創建一個永無止境的處理循環..並在每個循環中創建並啓動媒體播放器 – stinepike 2013-04-23 13:02:00

回答

1

退房這個 -

Handler handler; 
    sButton.setOnClickListener(new View.OnClickListener() 
      { 

       @Override 
       public void onClick(View v) 
       { 
        rounds = new Integer(et.getText().toString()); 
        for (int j = 0; j <= rounds; j ++) 
        { 
         f(); 
        } 
       } 
      }); 

    public void f() 
    { 
      r = new Runnable() 
      { 
       @Override 
       public void run() 
       { 

        handler = new Handler() { 
        public void handleMessage(Message msg) { 
        mp = MediaPlayer.create(Box.this, R.drawable.sound1); 
        mp.setLooping(false); 
        mp.setVolume(1.0f, 1.0f); 
        mp.start(); 
        handler.sendEmptyMessageDelayed(1,3000);//3 sec 
        msg.what = 2;//removing first executed handler this is u missing. 
        }; 
       }; 
       handler.sendEmptyMessageDelayed(1,4000);//4sec 
       } 
      } 
    } 
+0

謝謝,但我得到了同樣的錯誤: 無法打開keycharmap文件 加載keycharmap文件時出錯。 – user2249145 2013-04-23 13:02:02

+0

爲什麼你調用這個thr循環,因爲它執行多次,它會啓動相同的ID處理程序,所以它會給錯誤,如果你一次調用沒有for循環,它會執行得很好可能是你有問題的邏輯 – 2013-04-23 13:12:03