【问题标题】:I get a NullPointerException because of media player playing in background由于媒体播放器在后台播放,我收到 NullPointerException
【发布时间】:2021-04-23 05:37:24
【问题描述】:

媒体播放器正在后台在我的应用程序中运行。一旦我离开应用程序并从后台再次调用它并执行操作,应用程序就会崩溃并出现 NullPointerException。这是我的代码。

package com.example.logistikmeisterprfungsvorbereitung;



public class Begrusung extends AppCompatActivity {


TextView tw5,tw3,tw4,impressum, agb;
Button btn2;
MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_begrusung);


    // Dieser Code wurde nachträglich hinzugefügt 17.01.2021  19:00Uhr
    try {
        player = MediaPlayer.create(this,R.raw.hintergrundmusik);
        player.start();
        player.setLooping(true);
    }catch (Exception e){

    }

   

    tw5= (TextView)findViewById(R.id.textView5);
    tw3 = (TextView)findViewById(R.id.textView3);
    agb = (TextView)findViewById(R.id.agb);
    impressum = (TextView)findViewById(R.id.impressum);
    agb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), Agb.class);
            startActivity(intent);
        }
    });
    impressum.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), Impressum.class);
            startActivity(intent);
        }
    });
    

    btn2 = (Button)findViewById(R.id.button2);
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(),MainActivity.class);
            startActivity(intent);
            player.pause();
            finish();
        }
    });

}

@Override
protected void onStop() {
    super.onStop();

        if (player != null && player.isPlaying()){
            player.stop();
            player.reset();
            player.release();
            player =null;
        }
        super.onStop();
    }
}

Logcat:

2021-01-18 20:01:51.320 25805-25805/com.example.logistikmeisterprfungsvorbereitung E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.logistikmeisterprfungsvorbereitung, PID: 25805
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.pause()' on a null object reference
    at com.example.logistikmeisterprfungsvorbereitung.Begrusung$3.onClick(Begrusung.java:62)
    at android.view.View.performClick(View.java:7184)
    at android.view.View.performClickInternal(View.java:7161)
    at android.view.View.access$3500(View.java:818)
    at android.view.View$PerformClick.run(View.java:27683)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:7562)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

我看到的方式,是由于 MediaPlayer.pause() 方法我怎么能解决这个问题?该活动有一个按钮,可带您进入游戏。然后声音应该停止,当你回去时声音应该重新开始。

【问题讨论】:

    标签: java android-studio nullpointerexception android-mediaplayer


    【解决方案1】:

    错误说明: 你得到一个空指针异常,因为你调用 pause() 函数的对象 MediaPlayer 不再存在。

    代码说明: 当您离开应用程序并将其置于后台时,将调用 onStop() 方法并释放您创建的 MediaPlayer 并将其设置为 null。因此,当您再次打开应用程序时,您会收到异常。

    提示: 请记住,onCreate() 函数仅在第一次创建 Activity 时调用一次。

    解决方案: 尝试在 onResume() 函数中创建您的 MediaPlayer 对象,而不是 onCreate()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多