我的代码有什么问题,请帮助我

乔丹23

主活动.java:

    import android.media.MediaPlayer;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;

    public class MainActivity extends AppCompatActivity {

        int currentPosition;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            MyListener myListener = new MyListener();

            Button startButton = (Button) findViewById(R.id.start);
            startButton.setOnClickListener(myListener);

            Button pauseButton = (Button) findViewById(R.id.pause);
            pauseButton.setOnClickListener(myListener);

        }
    }

我的监听器.java:

    import android.media.MediaPlayer;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;

    public class MyListener extends AppCompatActivity implements View.OnClickListener{

        MediaPlayer musicPlayer = MediaPlayer.create(this, R.raw.sound_file);

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my_listener);
        }

        @Override
        public void onClick(View v){

            switch(v.getId()){
                case R.id.start:
                    musicPlayer.start();
                    break;
                case R.id.pause:
                    musicPlayer.pause();
                    break;
            }
        }
    }

Logcat 显示以下错误:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.musicplayer/com.example.android.musicplayer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

我正在尝试创建一个从我的 res/raw 文件播放音频的应用程序,但我的代码似乎有问题,因为它不起作用,请帮助我。

迈克尔·多德

首先,您的MediaPlayer实例应该驻留在 中MainActivity,而不是 中MyListener,并且MyListener不应扩展活动。事实上,您应该将所有代码从MyListenerinto 中移动MainActivity,我在您提供的代码段中并没有真正看到它的目的。

其次,您正在Activity LifecycleMediaPlayer之外创建您的内容,同时仍然尝试将 Context 传递给它:

public class MainActivity extends AppCompatActivity {

    MediaPlayer musicPlayer = MediaPlayer.create(this, R.raw.sound_file);
    ...
}

this在 Activity Lifecycle 开始之前,Activity没有 Context ( ),您在上面编写它的方式等效于musicPlayer在构造函数中定义

public class MainActivity extends AppCompatActivity {

    MediaPlayer musicPlayer; 

    public MyListener() {
        musicPlayer = MediaPlayer.create(this, R.raw.sound_file);
    }
    ...
}

这也将失败,因为活动生命周期尚未开始。您需要做的是声明musicPlayer为类的成员,然后在onCreate()其中初始化 Context 的地方创建一个实例

public class MainActivity extends AppCompatActivity {

    MediaPlayer musicPlayer; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_listener);
        musicPlayer = MediaPlayer.create(this, R.raw.sound_file);
    }
    ...
}

为了解决您的评论,这里有一个示例,说明它如何适合您MainActivity使用lambdas

public class MainActivity extends AppCompatActivity {

    int currentPosition;
    MediaPlayer musicPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        musicPlayer = MediaPlayer.create(this, R.raw.sound_file);

        Button startButton = (Button) findViewById(R.id.start);
        startButton.setOnClickListener(view -> musicPlayer.start());

        Button pauseButton = (Button) findViewById(R.id.pause);
        pauseButton.setOnClickListener(view -> musicPlayer.pause());
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章