2017-04-21 66 views
0

我加載從異步任務的視頻,並得到這個錯誤Android的方法setOnPreparedListener必須從UI線程調用,目前推斷線程是工人

方法setOnPreparedListener必須從UI線程調用,目前推斷線程工人。

@Override 
    protected Void doInBackground(Void... params) { 

     videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      public void onPrepared(MediaPlayer mp) { 
       progressDialog.dismiss(); 
       videoView.start(); 
       duration = videoView.getDuration(); 
      } 
     }); 

     do { 

      current = videoView.getCurrentPosition(); 
      System.out.println("duration - " + duration + " current- " 
        + current); 

      if (sync.isCancelled()) 
       break; 

     } 

     while (current != duration || current == 0); 

     return null; 
    } 

怎麼辦?

+1

你有你的答案,從主線調用。 – Spartan

+0

@斯巴達但如何? –

+0

你應該在'onPreExecute' –

回答

0

將其移動到onPreExecute(在UI線程上執行)。在你的AsyncTask裏面加上:

@Override 
    protected void onPreExecute() { 
     videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      public void onPrepared(MediaPlayer mp) { 
       progressDialog.dismiss(); 
       videoView.start(); 
       duration = videoView.getDuration(); 
      } 
     }); 

    } 
相關問題