-1

私はウェブ上のいくつかのアンドロイドチュートリアルに従っています。できる限り彼のコードをコピーしようとしましたが、アプリケーションを実行するたびにクラッシュします。コンソールを調べたところ、Nullpointer 例外が原因であることがわかりました。アプリケーションは、サウンドを再生し、閉じてから別のレイアウトに移動することを目的としています。これが私のコードです。何が間違っていたか教えてください。

    package com.greg.hello;

    import android.app.Activity;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.Bundle;

    public class MainActivity extends Activity {
    MediaPlayer mpSplash;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        MediaPlayer mpSplash = MediaPlayer.create(this, R.raw.explosion);
        mpSplash.start();
        Thread logoTimer = new Thread(){
            public void run(){
                try{
                    int logoTimer=0;
                    while(logoTimer<8000){
                        sleep(100);
                        logoTimer=logoTimer+100;
                    }
                    startActivity(new     Intent("com.greg.hello.CLEARSCREEN"));
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    setContentView(R.layout.tutorial1);
                    e.printStackTrace();
                }

                finally{
                    finish();
                }
            }   
        };
        logoTimer.start();
        finish();
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mpSplash.release();
        startActivity(new Intent("com.greg.hello.TUTORIALONE"));
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        mpSplash.pause();
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        mpSplash.start();
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        setContentView(R.layout.activity_main);
    }

}
4

2 に答える 2

2

これは間違いなく 1 つの NPE です。交換してください

MediaPlayer mpSplash = MediaPlayer.create(this, R.raw.explosion);

this.mpSplash = MediaPlayer.create(this, R.raw.explosion);
于 2012-08-23T04:06:48.900 に答える
0

onCreate()線の内側

MediaPlayer mpSplash = MediaPlayer.create(this, R.raw.explosion);

ローカル変数です。

で置き換えます

this.mpSplash = MediaPlayer.create(this, R.raw.explosion);

NullPointerExceptionが発生した場合。

onDestroy()

きみが呼んだ

mpSlash.release()

まだ初期化されていませんが、初期化されていると思っていましたonCreate()

于 2012-08-23T04:15:03.617 に答える