【问题标题】:Error with mediaPlayer.create(this, R.raw.sound) when not in onCreate不在 onCreate 中时 mediaPlayer.create(this, R.raw.sound) 出错
【发布时间】:2016-10-17 05:46:36
【问题描述】:

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

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

你们能帮我解决这个问题吗? :)

    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");
                }
            }
        });
    }
}

}

【问题讨论】:

    标签: java android android-mediaplayer


    【解决方案1】:

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

    所以在你的活动中实例化你的适配器:

    clipsAdapter = new ClipsAdapter(this); 
    

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

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

    最后:

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

    【讨论】:

    • 嗨安托!感谢您的帮助,我能够毫无错误地播放我的程序 :) 因此,如果我理解得很好,我们将使用构造函数将当前活动设置为播放声音剪辑的活动。这是必需的,因为我们需要一个活动来启动剪辑。
    • 我想它现在可以工作了,尽管我认为使用模拟器我们实际上无法播放声音......我说的对吗?
    • 很高兴听到。您应该能够使用模拟器播放声音。那么这是另一个问题。检查这是否有帮助stackoverflow.com/questions/5259849/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多