MainActivity.this为什么提示错误

刚学java代码,不会写,到底怎么弄啊?弄了一下午,也不知道怎么办,真的烦死了

img

类名.后面应该跟静态方法或者静态变量,this是当前类的实例对象的引用,不能混用

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/354012
  • 除此之外, 这篇博客: 播放多媒体文件(音频,视频)中的 MainActivity.java代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    private MediaPlayer mp= new MediaPlayer();//MediaPlayer 实例
    private Button play;
    private Button pause;
    private Button stop;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        play = findViewById(R.id.play);//播放按钮
        pause = findViewById(R.id.pause);//暂停按钮
        stop = findViewById(R.id.stop);//停止按钮
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        stop.setOnClickListener(this);
        //动态申请权限
        //判断是否有这个权限,没有就加权限
        if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1 );
        }else{
        //否则直接调用音频方法
            initMediaPlayer();
        }
    }
    
    //请求权限后的回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 1:
                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    initMediaPlayer();
                }else{
                    Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
                default:
        }
    }
    
    private void initMediaPlayer(){
        //创建一个File对象指定音频的文件路径
        File file = new File(Environment.getExternalStorageDirectory(),"奇妙世界.mp3");
        try {
            mp.setDataSource(file.getPath());//指定音频文件的路径
            mp.prepare();//让MediaPlayer进入到准备状态
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    	//按钮点击事件
      @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.play:
                if(!mp.isPlaying()){
                    mp.start();//开始播放
                }
    
                break;
            case R.id.pause:
                if(mp.isPlaying()){
                    mp.pause();
                 
                }
    
                break;
            case R.id.stop:
                if(mp.isPlaying()){
                    mp.reset();//停止播放
                    initMediaPlayer();
                }
                break;
                default:
                    break;
        }
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //将资源释放掉
        if(mp != null){
            mp.stop();
            mp.release();
        }
    }
    }
    

    我们先创建了一个MediaPlayer 实例和得到三个按钮控件的实例。然后在onCreate()里面动态申请WRITE_EXTERNAL_STORAGE这个权限(因为我们要访问手机上的SD卡),做个判断,如果没有这个权限就添加这个权限,如果有,就直接调用 initMediaPlayer()这个方法。
    在onRequestPermissionsResult()方法中,如果用户拒绝了权限申请,那么就调用finish()方法将程序关掉,因为没有SD卡的权限,这个程序用不了。
    用户同意了权限后就会调用initMediaPlayer()方法。我们先创建一个File对象来指定音频文件的路径,从这里可以看出,我们需要事先在SD卡的根目录下放入一个音频文件,名字可以自己定义。后面分别调用setDataSource()方法和prepare()方法,得到音频文件的路径和让MediaPlayer进入到准备状态。(这里注意一下,有些人会找不到SD卡的根目录在哪,因为我也遇到过这个问题~,你可以直接把音频放在打开内部存储的第一个页面中)。
    接下来就是点击事件,当你点击播放按钮的时候,会判断这个音频是否在播放,如果不在就调用start()开始播放。当你点击暂停按钮时,会判断音频是否在播放,如果在就调用pause()暂停音频。当你点击停止按钮的时候,会判断音频是否在播放,如果在播放就调用reset()将音频重置为初创建的状态,然后重新调用initMediaPlayer()方法。
    最后,在onDestroy()方法中调用stop()方法和release()方法,将MediaPlayer资源释放掉。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^