0

このエラーメッセージが表示されました:

09-05 19:58:00.883: E/AndroidRuntime(21920): java.lang.RuntimeException: Unable to pause      activity {com.De7kat.Grid/com.De7kat.Grid.De7katGrid}: java.lang.NullPointerException

アクティビティ2に移動し、デバイスの[戻る]ボタンをクリックしてアクティビティ1に戻ろうとしたとき。

de7katgridアクティビティコードは次のとおりです。

package com.De7kat.Grid;


public class De7katGrid extends Activity {
private MediaPlayer mp;
public Integer[] mSongsIds = {
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,R.raw.far,
        R.raw.beet,    };
public Object getItem(int position) {
    return mSongsIds[position];
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid_layout);

    GridView gridView = (GridView) findViewById(R.id.grid_view);

    // Instance of ImageAdapter Class
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {
             stopPlaying();
             mp = MediaPlayer.create(De7katGrid.this,mSongsIds[position]);
             mp.start();

           }
    });
}
@Override
public void onPause() {
    super.onPause();
    if (mp.isPlaying()) {
       mp.stop();



    }
}

    private void stopPlaying() {
        if (mp != null) {
            mp.stop();
            mp.release();
            mp = null;


       }
    }
 }
4

3 に答える 3

0

アクティビティに戻るのは、前のアクティビティmpを解放できなかったためにnull電話をかけた後です。次のようにメソッドをcreate()変更します。onPause()

@Override
public void onPause() {
    super.onPause();
    stopPlaying();
}
于 2012-09-05T17:11:36.910 に答える
0

stopPlaying()でメソッドを呼び出してみませんonPause()か?コードを複製するよりも優れています(nullNullPointerExceptionかどうかをチェックしないために発生する、を削除します):mp

@Override
public void onPause() {
    super.onPause();
    stopPlaying();
}
于 2012-09-05T17:13:39.340 に答える
0

onPauseが呼び出されたとき、mpはnullだと思います。

于 2012-09-05T17:14:12.337 に答える