0

さて、私のアプリは起動時にメニューがあり、そこでボタンを押してアプリを開始します。メディアプレーヤーが起動するとすぐに再生が開始されますが、戻るボタンをクリックした場合は、ボタンを押してアプリを再起動し、ボタンをクリックして音楽を停止するとアプリがクラッシュします。ここにそのためのコードがあります。携帯電話でクラッシュしましたが、エミュレーターでは正常に動作します。コメントをいただければ幸いです。ありがとう

int cancion = 1, cancion1 = 1;
MediaPlayer song, song1, song2, song3, song4;
if (cancion == 1)
    {
        song1.start();
        playing = true;
        song1.setLooping(true);
        song = song1;
    }
music.setOnLongClickListener(new View.OnLongClickListener() {

    public boolean onLongClick(View view) {
            song.pause();
            song.seekTo(0);
            playing = false;
            cancion = cancion+1;

            if (cancion == 5)
            {
                cancion = 1;
            }
            if (cancion == 1)
            {
                song1.start();
                playing = true;
                song1.setLooping(true);
                song = song1;
            }
            else if (cancion == 2)
            {
                song2.start();
                playing = true;
                song2.setLooping(true);
                song = song2;
            }
            else if (cancion == 3)
            {
                song3.start();
                playing = true;
                song3.setLooping(true);
                song = song3;
            }
            else if (cancion == 4)
            {
                song4.start();
                playing = true;
                song4.setLooping(true);
                song = song4;
            }

        return true;
    }
});
    music.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            if (!playing)
            {
                song.start();
                playing = true;
            }

            else
            {
                song.pause();
                song.seekTo(0);
                playing = false;
                cancion1 = 2;
            }
        }
});
@Override
protected void onResume() {
    super.onResume();
    if(!song.isPlaying() && cancion1 != 2)
    {
        song.start();
        playing = true;
    }
}
@Override
public void onPause(){
    super.onPause();
    if(song.isPlaying())
    {
        song.pause();
        song.seekTo(0);
        playing = false;
    }
}

LogCat:

04-22 22:12:47.151:W / ActivityNative(12915):ACTIVITY_IDLE_TRANSACTIONを送信します04-22 22:12:47.541:W / dalvikvm(12915):threadid = 1:スレッドがキャッチされない例外で終了します(group = 0x400207d8)04- 22 22:12:47.551:E / AndroidRuntime(12915):致命的な例外:メイン04-22 22:12:47.551:E / AndroidRuntime(12915):java.lang.NullPointerException 04-22 22:12:47.551:E / AndroidRuntime(12915):com.try.player.DragActivity $ 5.onClick(DragActivity.java:1772)04-22 22:12:47.551:E / AndroidRuntime(12915):android.view.View.performClick(View。 java:2408)04-22 22:12:47.551:E / AndroidRuntime(12915):android.view.View $ PerformClick.run(View.java:8816)04-22 22:12:47.551:E / AndroidRuntime( 12915):android.os.Handler.handleCallback(Handler.java:587)04-22 22:12:47.551:E / AndroidRuntime(12915):android.os.Handler.dispatchMessage(Handler.java:92)04 -22 22:12:47.551:E / AndroidRuntime(12915):android.os.Looper.loop(Looper.java:123)04-22 22:12:47.551:E / AndroidRuntime(12915):android.app.ActivityThread.main(ActivityThread .java:4633)04-22 22:12:47.551:E / AndroidRuntime(12915):java.lang.reflect.Method.invokeNative(ネイティブメソッド)04-22 22:12:47.551:E / AndroidRuntime(12915) :at java.lang.reflect.Method.invoke(Method.java:521)04-22 22:12:47.551:E / AndroidRuntime(12915):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit .java:858)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)04-22 22:12:47.551:E /AndroidRuntime(12915):dalvik.system.NativeStart.main(ネイティブメソッド)at android.app.ActivityThread.main(ActivityThread.java:4633)04-22 22:12:47.551:E / AndroidRuntime(12915):at java.lang.reflect.Method.invokeNative(Native Method)04-22 22: 12:47.551:E / AndroidRuntime(12915):java.lang.reflect.Method.invoke(Method.java:521)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal .os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 04-22 22:12:47.551:E / AndroidRuntime(12915):dalvik.system.NativeStart.main(ネイティブメソッド)at android.app.ActivityThread.main(ActivityThread.java:4633)04-22 22:12:47.551:E / AndroidRuntime(12915):at java.lang.reflect.Method.invokeNative(Native Method)04-22 22: 12:47.551:E / AndroidRuntime(12915):java.lang.reflect.Method.invoke(Method.java:521)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal .os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 04-22 22:12:47.551:E / AndroidRuntime(12915):dalvik.system.NativeStart.main(ネイティブメソッド)java:521)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)04-22 22:12:47.551: E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)04-22 22:12:47.551:E / AndroidRuntime(12915):dalvik.system.NativeStart.main (ネイティブ方式)java:521)04-22 22:12:47.551:E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)04-22 22:12:47.551: E / AndroidRuntime(12915):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)04-22 22:12:47.551:E / AndroidRuntime(12915):dalvik.system.NativeStart.main (ネイティブ方式)

4

1 に答える 1

1

現在再生中の曲を再開するのではなく、onPause()すべてのオブジェクトを解放するように変更します。MediaPlayer

このようなもの:

@Override
public void onPause(){
    super.onPause();

    song.release();
    song1.release();
    //and so on

}
于 2012-04-23T00:55:40.207 に答える