2013-05-09 19 views
0

我不知道爲什麼我得到處理程序錯誤。這些代碼一直工作,直到我添加處理程序來控制seekbar時,它會提示錯誤。seekbar不工作時runnable和handler.postdelayed()在Android應用程序中添加

package com.voice.recording.v3; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 

public class VoiceRecordingPlaybackv3Activity extends Activity implements  OnCompletionListener, 
OnTouchListener, OnClickListener, OnSeekBarChangeListener { 

MediaPlayer mediaPlayer; 
View theView; 
Button stopButton, startButton, quitButton; 
SeekBar seekBar; 
Handler handler; 

int position = 0; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    stopButton = (Button)this.findViewById(R.id.StopButton); 
    startButton = (Button)this.findViewById(R.id.StartButton); 
    quitButton = (Button)this.findViewById(R.id.quitButton); 

    startButton.setOnClickListener(this); 
    stopButton.setOnClickListener(this); 
    quitButton.setOnClickListener(this); 

    theView = this.findViewById(R.id.theview); 

    theView.setOnTouchListener(this); 

    mediaPlayer = MediaPlayer.create(this, R.raw.goodmorningandroid); 
    mediaPlayer.setOnCompletionListener(this); 

    seekBar = (SeekBar) findViewById(R.id.seekBar1); 
    seekBar.setOnSeekBarChangeListener(this); 
    seekBar.setMax(mediaPlayer.getDuration()); 

} 

public void onCompletion(MediaPlayer mp){ 
    mediaPlayer.start(); 
    mediaPlayer.seekTo(position); 
} 

public boolean onTouch(View v, MotionEvent me){ 
    if(me.getAction() == MotionEvent.ACTION_MOVE){ 
     if(mediaPlayer.isPlaying()){ 
      position = (int)(me.getX()* 
        mediaPlayer.getDuration()/theView.getWidth()); 
      Log.v("SEEK",""+position); 
      mediaPlayer.seekTo(position); 
     } 
    } 

    return true; 
} 

public void onClick(View v){ 
    if(v == stopButton){ 
     mediaPlayer.pause(); 
    }else if(v == startButton){ 
     try{ 
      mediaPlayer.start(); 
      startPlayProgressUpdater(); 
     }catch(IllegalStateException e){ 
      mediaPlayer.pause(); 
     } 
    }else if(v == quitButton){ 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
    } 
} 

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

} 

public void onStartTrackingTouch(SeekBar seekBar) { 

} 


public void onStopTrackingTouch(SeekBar seekBar) { 
    seekBar.setSecondaryProgress(seekBar.getProgress()); 
} 

public void startPlayProgressUpdater() { 
    seekBar.setProgress(mediaPlayer.getCurrentPosition()); 

    if (mediaPlayer.isPlaying()) { 
     Runnable notification = new Runnable() { 
      public void run() { 
       startPlayProgressUpdater(); 
      } 
     }; 
     handler.postDelayed(notification,100); 
    }else{ 
     mediaPlayer.pause(); 
     seekBar.setProgress(0); 
     } 
    } 
} 

我得到的錯誤是空指針異常,任何人都可以請指出我的錯誤的

回答

1

你的代碼顯示了處理程序是由未初始化定義。如果這不是問題,請發佈堆棧跟蹤。

+0

是的,我沒有初始化處理程序。謝謝楊帆 – kojh 2013-05-09 08:11:27

相關問題