android - 媒体播放器搜索栏问题

标签 android android-mediaplayer seekbar runnable

我正在尝试创建一个媒体播放器,它将更新一个搜索栏,告诉正在播放的歌曲的当前位置。我试过这段代码,但似乎出了点问题。有人可以帮我解决这个错误吗?

这是我的代码

public class AlbumDetails extends Activity implements OnClickListener {

    private ImageView play, forward, backward;
    private MediaPlayer mediaPlayer;
    private boolean playing = false;
    private ProgressDialog dialog;
    private String mp3link;
    private SeekBar seekbar;
    private Handler handler;
    private int mediaPos;
    private int mediaMax;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playeer);
        initWidgets();

    }

    private void initWidgets() {
        play = (ImageView) findViewById(R.id.playeer_play);
        play.setOnClickListener(this);
        seekbar = (SeekBar) findViewById(R.id.playeer_seek);
        forward = (ImageView) findViewById(R.id.playeer_forward);
        backward = (ImageView) findViewById(R.id.playeer_back);
        mediaPlayer = new MediaPlayer();
        mp3link = getIntent().getStringExtra("mp3link");
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.playeer_play:
            playFunction();
            break;
        }
    }

    private void playFunction() {
        if (!playing) {
            try {
                dialog = ProgressDialog
                        .show(AlbumDetails.this,
                                "",
                                getString(com.darkovski.quran.R.string.buffering),
                                true);
                dialog.setCancelable(true);
                dialog.show();
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mediaPlayer.setDataSource(mp3link);
                mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        play.setBackgroundResource(R.drawable.pause);
                        playing = true;
                        //this is new
                        mediaPos = mp.getCurrentPosition();
                        mediaMax = mp.getDuration();

                        seekbar.setMax(mediaMax);
                        seekbar.setProgress(mediaPos);
                        //this line is the error
                        handler.removeCallbacks(moveSeekBarThread);
                        handler.postDelayed(moveSeekBarThread, 100);

                        mp.start();
                        dialog.dismiss();
                    }
                });
                mediaPlayer.prepareAsync();

            } catch (Exception e) {
                e.printStackTrace();
                dialog.dismiss();
            }
        } else {
            play.setBackgroundResource(R.drawable.play_play);
            mediaPlayer.stop();
            mediaPlayer.release();
            playing = false;
        }
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        if (mediaPlayer.isPlaying())
            mediaPlayer.stop();
        mediaPlayer.release();
    }

    private Runnable moveSeekBarThread = new Runnable() {

        public void run() {
            if (mediaPlayer.isPlaying()) {
                int mediaPos_new = mediaPlayer.getCurrentPosition();
                int mediaMax_new = mediaPlayer.getDuration();
                seekbar.setMax(mediaMax_new);
                seekbar.setProgress(mediaPos_new);

                handler.postDelayed(this, 100); // Looping the thread after 0.1
                                                // second
                                                // seconds
            }

        }
    };
}

我从 logcat 得到这个:

12-07 15:38:27.148: E/AndroidRuntime(2835): FATAL EXCEPTION: main
12-07 15:38:27.148: E/AndroidRuntime(2835): java.lang.NullPointerException
12-07 15:38:27.148: E/AndroidRuntime(2835):     at com.darkovski.quran.AlbumDetails$2.onPrepared(AlbumDetails.java:78)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1523)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at android.os.Looper.loop(Looper.java:137)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at android.app.ActivityThread.main(ActivityThread.java:4441)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at java.lang.reflect.Method.invokeNative(Native Method)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at java.lang.reflect.Method.invoke(Method.java:511)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-07 15:38:27.148: E/AndroidRuntime(2835):     at dalvik.system.NativeStart.main(Native Method)

谁能告诉我问题出在哪里,我该如何解决?

最佳答案

您的处理程序null,因为您尚未将该数据成员初始化为任何内容。

关于android - 媒体播放器搜索栏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442640/

相关文章:

android - 如何从 appcenter 命令行和 Jenkins 将 IPA 和 APK 文件推送到 App Center Distribute

java - 如何为多个 fragment 使用一个 MediaPlayer 实例

java - 如何在给定的不活动时间后隐藏 View

java - 安卓java : Using a seekbar's progressValue correctly

android - ListView回收切换seekbar位置

android - 从字符串解析颜色时出错

android - 在我的手机上调试不同语言/语言环境的 Android 应用程序

android - 如何在android opencv中将 mask 应用于实时相机

android - 媒体播放器 : error (-19, 0)

java - 在再次播放之前停止 MediaPlayer 不起作用