java - 不在 onCreate 中时,mediaPlayer.create(this, R.raw.sound) 出错

标签 java android android-mediaplayer

我正在开发一个应用程序,它基本上是一个音乐库,对于每首歌曲,当您按下播放按钮时,歌曲就会开始播放。目前,我的库有 3 个项目,我正在尝试为其中的 3 个项目播放“sound.mp3”(位于 res/raw 中)(目前)。

我的问题是,当我尝试引用该剪辑时,“this, R.raw.sound”下有一条红色下划线。我看到在大多数情况下,“create”是在 onCreate 中调用的,但就我而言,此类不是 Activity ,所以我不能这样做......

你们能帮我吗? :)

    public class ClipsAdapter extends RecyclerView.Adapter<ClipsAdapter.MyViewHolder> {

private final List<Clips> clip2 = Arrays.asList(
        new Clips("Clip 1", "Artist 1"),
        new Clips("Clip 2", "Artist 2"),
        new Clips("Clip 3", "Artist 3")
);

public class MyViewHolder extends RecyclerView.ViewHolder {

    private final TextView title;
    private final TextView author;
    private final ImageView play;

    private Clips currentClip;
    MediaPlayer mediaPlayer = new MediaPlayer();

    public MyViewHolder(final View itemView) {
        super(itemView);

        title = ((TextView) itemView.findViewById(R.id.title));
        author = ((TextView) itemView.findViewById(R.id.author));
        play = ((ImageView) itemView.findViewById(R.id.play));
    }

    public void display(RandomClips RandomClip) {
        currentRandomClip = RandomClip;
        title.setText(RandomClip.title);
        author.setText(RandomClip.author);
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Play clip: " + currentClip.title);
                mediaPlayer.create(this, R.raw.sound);

                if (mediaPlayer.isPlaying())
                {
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    Log.d(TAG, currentRandomClip.title + " has stopped");
                }
                else
                {
                    mediaPlayer.start();
                    Log.d(TAG, currentRandomClip.title + " is playing");
                }
            }
        });
    }
}

}

最佳答案

mediaPlayer.create() 请求上下文和要播放的文件。 您作为参数传递的“this”不是上下文(您位于匿名类中),因此您会收到错误。
你应该传递一个上下文。 只需在实例化 ClipsAdapter 时传递 Activity 的上下文即可。

因此,在您的 Activity 中实例化您的适配器:

clipsAdapter = new ClipsAdapter(this); 

在您的 ClipsAdapter 类中,创建一个带有一个参数的构造函数:

public ClipsAdapter(YourActivity activity) {
    this.activity = activity;
}

最后:

mediaPlayer.create(activity, R.raw.sound);

关于java - 不在 onCreate 中时,mediaPlayer.create(this, R.raw.sound) 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40074475/

相关文章:

android - 使用 MediaPlayer 后释放消耗的内存

java - 在sdk版本中进行编译需要什么

android - ContentResolver 更改图库文件夹名称

java - 如何在Android ListView中加载list_item_event.xml?

c# - 可拖动的 Boxview 不更新 Xamarin

android - 在 Http Live Streaming Android 3.0+ 中获取当前日期

java - 如何使用@KafkaListener spring boot 2消费者获取消费者id

java - 根据电子表格选择页面上的值 - Java - Selenium Webdriver

java - JTextArea不显示

java - Android 应用程序中的停止/播放按钮