与处理程序相关的多个编译错误



有一些错误,我不能解决后复制源代码。有人知道我该怎么做吗?

错误如下:

  • 无法解析'Handler'中的'sendMessage'方法
  • 类"从Handler派生的匿名类"必须声明为抽象类或在"Handler"中实现抽象方法"publish(LogRecord)">

MusicPlayer.java

package com.example.serenityapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.logging.Handler;
public class MusicPlayer extends AppCompatActivity {
ImageView play, prev, next, imageView;
TextView songTitle;
SeekBar mSeekBarTime, mSeekBarVol;
static MediaPlayer mMediaPlayer;
private Runnable runnable;
private AudioManager mAudioManager;
int currentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_player);
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
// initializing views
play = findViewById(R.id.play);
prev = findViewById(R.id.prev);
next = findViewById(R.id.next);
songTitle = findViewById(R.id.songTitle);
imageView = findViewById(R.id.imageView);
mSeekBarTime = findViewById(R.id.seekBarTime);
mSeekBarVol = findViewById(R.id.seekBarVol);
// creating an ArrayList to store our songs
final ArrayList<Integer> songs = new ArrayList<>();
songs.add(0, R.raw.sound1);
songs.add(1, R.raw.sound2);
songs.add(2, R.raw.sound3);
songs.add(3, R.raw.sound4);
songs.add(4, R.raw.sound5);

// intializing mediaplayer
mMediaPlayer = MediaPlayer.create(getApplicationContext(), songs.get(currentIndex));

// seekbar volume
int maxV = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int curV = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mSeekBarVol.setMax(maxV);
mSeekBarVol.setProgress(curV);
mSeekBarVol.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});

//above seekbar volume
//
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSeekBarTime.setMax(mMediaPlayer.getDuration());
if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
play.setImageResource(R.drawable.ic_playbtn_foreground);
} else {
mMediaPlayer.start();
play.setImageResource(R.drawable.ic_pausebtn_foreground);
}
songNames();
}
});

next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaPlayer != null) {
play.setImageResource(R.drawable.ic_pausebtn_foreground);
}
if (currentIndex < songs.size() - 1) {
currentIndex++;
} else {
currentIndex = 0;
}
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer = MediaPlayer.create(getApplicationContext(), songs.get(currentIndex));
mMediaPlayer.start();
songNames();
}
});

prev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaPlayer != null) {
play.setImageResource(R.drawable.ic_pausebtn_foreground);
}
if (currentIndex > 0) {
currentIndex--;
} else {
currentIndex = songs.size() - 1;
}
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer = MediaPlayer.create(getApplicationContext(), songs.get(currentIndex));
mMediaPlayer.start();
songNames();
}
});
}
private void songNames() {
if (currentIndex == 0) {
songTitle.setText("Sound 1");
imageView.setImageResource(R.drawable.gridbg3);
}
if (currentIndex == 1) {
songTitle.setText("Sound 2");
imageView.setImageResource(R.drawable.gridbg3);
}
if (currentIndex == 2) {
songTitle.setText("Sound 3");
imageView.setImageResource(R.drawable.gridbg3);
}
if (currentIndex == 3) {
songTitle.setText("Sound 4");
imageView.setImageResource(R.drawable.gridbg3);
}
if (currentIndex == 4) {
songTitle.setText("Sound 5");
imageView.setImageResource(R.drawable.gridbg3);
}

// seekbar duration
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mSeekBarTime.setMax(mMediaPlayer.getDuration());
mMediaPlayer.start();
}
});
mSeekBarTime.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mMediaPlayer.seekTo(progress);
mSeekBarTime.setProgress(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
new Thread(new Runnable() {
@Override
public void run() {
while (mMediaPlayer != null) {
try {
if (mMediaPlayer.isPlaying()) {
Message message = new Message();
message.what = mMediaPlayer.getCurrentPosition();
handler.sendMessage(message); //**ERROR IN THIS PART**
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
//**ERROR IN THIS PART**
@SuppressLint("Handler Leak") Handler handler = new Handler () {
public void handleMessage  (Message msg) {
mSeekBarTime.setProgress(msg.what);
}
};
}

您导入了错误的包。你期望的Handler存在于android.os.Handler中。但是您已经导入了java.util.logging.Handler

导入正确的包将解决这两个错误。

MusicPlayer.java内部,做以下修改:

package com.example.serenityapplication;
import androidx.appcompat.app.AppCompatActivity;
...
import android.os.Handler;

最新更新