0

第一个活动完成后,我正在开发一个应用程序。我正在mediaplayer通过上一个活动中的许多活动开始音乐并导航。我无法停止媒体播放器。我已经调用了第一个活动类方法来停止媒体播放器,但它显示空指针异常,任何人都可以为我提供相关解决方案,我没有使用服务类。

下面显示的是我启动媒体播放器的第一个活动。

public class GamemenuActivity extends Activity implements OnClickListener {
        Button newgame, highscore, help,sound;
        MediaPlayer mp;
        int i=0;
        TranslateAnimation anim, anim511, anim2511,animsound;
        BounceInterpolator bo;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.menuscreen);
            media();
            newgame = (Button) findViewById(R.id.newgamebutton);
            highscore = (Button) findViewById(R.id.highscoresButton);
            help = (Button) findViewById(R.id.helpbutton);
            sound=(Button)findViewById(R.id.soundbutton);
            anim = new TranslateAnimation(3250, 0, 100, 0);
            anim511 = new TranslateAnimation(3250, 0, 100, 0);
            anim2511 = new TranslateAnimation(3250, 0, 100, 0);
            animsound=new TranslateAnimation(3250, 0,100,0);
            anim.setFillAfter(true);

            newgame.startAnimation(anim);

            anim511.setDuration(3000);

            anim.setDuration(3000);
            anim511.setFillAfter(true);
            highscore.startAnimation(anim511);

            anim2511.setDuration(3000);
            anim2511.setFillAfter(true);
            help.startAnimation(anim2511);

            animsound.setDuration(3000);
            animsound.setFillAfter(true);
            sound.startAnimation(animsound);


            newgame.setOnClickListener(this);
            highscore.setOnClickListener(this);
            help.setOnClickListener(this);
            sound.setOnClickListener(this);
        }


        public void media() {
             /* Intent i=new Intent(GamemenuActivity.this,Background.class);
              startService(i);*/

            mp = MediaPlayer.create(getApplicationContext(), R.raw.gameback);

            mp.start();
            mp.setVolume(1, 1);
            mp.setLooping(true);

        }

            public void stopmedia(){
                mp.stop();
                mp.release();
           }

我想结束音乐的活动如下

public class Highpage extends Activity{
    TextView name,score;
    int sli;
    Button sub;
    Bundle base;
    SQLiteHelper sqdb;
    String data,val;
    GamemenuActivity gm; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
            gm=new GamemenuActivity();
        TextView name=new TextView(this);
            TextView score=new TextView(this);
            base=getIntent().getExtras();
        data=base.getString("a");
        val=base.getString("b");
        sli=base.getInt("brk");
        name.setText(data);
        score.setText(val);
        System.out.println("values are"+data  +val);
        sqdb=new SQLiteHelper(this);
            sqdb.insertvalues(data, val,sli);
        Toast.makeText(Highpage.this, "values updated successfully", 30).show();

        //stopping media player
        gm.stopmedia();

        Intent hm=new Intent(Highpage.this,GamemenuActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        startActivity(hm);
        finish();
    }


}

这是logcat中的错误

12-23 14:54:37.179: E/AndroidRuntime(11970):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
12-23 14:54:37.179: E/AndroidRuntime(11970):    at dalvik.system.NativeStart.main(Native Method)
12-23 14:54:37.179: E/AndroidRuntime(11970): Caused by: java.lang.NullPointerException
12-23 14:54:37.179: E/AndroidRuntime(11970):    at mobbi.Stallion.imageteaser.GamemenuActivity.stopmedia(GamemenuActivity.java:80)
4

2 回答 2

0

你在这里编码真的很奇怪。

您必须了解创建活动的对象与运行活动不同。(通过任何方法,例如意图)

所以当你创建它的对象时,GameMenuActivity它只会运行Activity的构造函数。

它不会运行该onCreate()方法。

因此没有MediaPlayer停止或释放的对象。因此发生空指针异常。

于 2012-12-23T09:59:45.603 回答
0

您说您没有使用服务,但在您的场景中,最好的办法是使用服务,因为您正在创建 2 个不同的媒体播放器实例。您在尚未启动的媒体播放器上调用停止,从而获得空指针。将媒体播放器放入服务中,它会让您停止它。

http://www.java2s.com/Code/Android/Media/UsingServicetoplaymediafile.htm

此外,您可能想要绑定它,您可能不想在 mainActivity 中忘记这段代码。

private ServiceConnection mediaServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName arg0, IBinder binder) 
    {
        mp3Service = ((LocalBinder) binder).getService();
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) 
    {
    }

};

您将能够通过执行以下操作来弄乱媒体播放器:

mp3Service.stop();

于 2012-12-25T23:29:25.800 回答