2013-07-13 3 views
0

Я новичок в программировании для Android. У меня есть следующий код, но у меня проблема. когда я нажимаю на кнопку поиска без воспроизведения звука, который он заставляет закрывать. я имею в виду, когда я нажимаю кнопку воспроизведения, я могу щелкнуть и искать стрелку, но не нажимая кнопку воспроизведения, нажав на кнопку поиска, сила будет близка. в чем проблема?!android force close on click on seekbar

import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 


    public class MainActivity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{ 
     private SeekBar seekBar; 
     private ImageButton startMedia; 
     private ImageButton pauseMedia; 
     private MediaPlayer mp; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main);    

      AudioControl();   
     } 

     public void AudioControl(){ 
      seekBar = (SeekBar) findViewById(R.id.seekBar1); 
      startMedia = (ImageButton) findViewById(R.id.playbutton); 
      pauseMedia = (ImageButton) findViewById(R.id.pausebutton); 
      seekBar.setOnSeekBarChangeListener(this); 
      startMedia.setOnClickListener(this); 
      pauseMedia.setOnClickListener(this); 
     } 

     public void run() { 
      int currentPosition= 0; 
      int total = mp.getDuration(); 
      while (mp!=null && currentPosition<total) { 
       try { 
        Thread.sleep(1000); 
        currentPosition= mp.getCurrentPosition(); 
       } catch (InterruptedException e) { 
        return; 
       } catch (Exception e) { 
        return; 
       }    
       seekBar.setProgress(currentPosition); 
      } 
     } 

     public void onClick(View v) { 
      if (v.equals(startMedia)) { 
       if (mp != null && mp.isPlaying()) return; 
       if(seekBar.getProgress() > 0) { 
        mp.start(); 
        return; 
       } 
       mp = MediaPlayer.create(MainActivity.this, R.raw.lone); 
       mp.start();      
       seekBar.setProgress(0); 
       seekBar.setMax(mp.getDuration()); 
       new Thread(this).start(); 
      } 

      if (v.equals(pauseMedia) && mp!=null) { 
       mp.pause(); 
      }  

     } 

     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      if(fromUser) mp.seekTo(progress); 

     } 
    } 

и у меня есть еще один вопрос: я хочу, когда пользователь нажимает на кнопку воспроизведения кнопка паузы становятся видимыми, и когда пользователь нажимает на кнопку паузы она Туэн Invisble. какой код мне нужен и, пожалуйста, скажите мне, где я должен положить этот код.

ответ

0

Каждый метод, который управляет UI должен быть вызван сам UI тему:

Вы не можете запустить

seekBar.setProgress(currentPosition); 

на тему различной Фром UIThread.