You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从WordAdapter类调用MediaPlayer.create方法,WordAdapter.this作为Context不被编译器接受

解决你的MediaPlayer与Context问题

我来帮你搞定这两个问题,咱们一步步拆解:

问题1:WordAdapter.this无法作为Context使用

你的WordAdapter继承自ArrayAdapter,而ArrayAdapter本身并不是Context的子类,所以WordAdapter.this的类型是Adapter本身,不符合MediaPlayer.create()要求的Context参数类型。

解决步骤:

  • 在WordAdapter中添加一个私有Context成员变量,用来保存构造时传入的Context:
    private Context mContext;
    
  • 在Adapter的构造方法中初始化这个变量(构造时已经传入了Context,直接存下来即可):
    public WordAdapter(Context context, List<Word> wordList) {
        super(context, 0, wordList); // 这里的参数根据你的实际构造方法调整
        mContext = context;
    }
    
  • 之后在点击事件里用mContext替代WordAdapter.this:
    playButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
            MediaPlayer mp = MediaPlayer.create(mContext, currentWord.getAudioResourceId()); 
            mp.start();
            // 额外建议:播放完成后释放MediaPlayer资源,避免内存泄漏
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer) {
                    mediaPlayer.release();
                }
            });
        } 
    });
    

问题2:找不到MediaPlayer.create(Context, int)方法

出现这个问题通常是以下几个原因之一:

  • 导入错误的MediaPlayer类:检查你的导入语句,必须是import android.media.MediaPlayer;,不要导入其他第三方库的同名类。
  • 资源id不正确:确认currentWord.getAudioResourceId()返回的是Android raw目录下的资源id(比如R.raw.your_audio_file),而不是其他类型的资源ID。
  • 调用方式错误:MediaPlayer.create()是静态方法,必须通过MediaPlayer类直接调用,不能用new MediaPlayer()的实例去调用这个方法。

内容的提问来源于stack exchange,提问作者mr.uaila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:48:23