2012-12-23 40 views
0

我在第一个Activity完成后正在开发一个应用程序。我通过mediaplayer开始音乐,并在上一次活动中浏览了许多活动。我无法停止mediaplayer。我已经调用了第一种活动类方法来停止mediaplayer,但它显示出nullpointer异常,任何人都可以为我提供相关的解决方案,我没有使用过服务类。Android中的MediaPlayer问题

下面显示的是我开始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) 
+1

播放后释放您的mediaplayer。 – Rahul

+0

你说要做mp.stop(); mp.release();我已经完成了最后一个活动,我必须停止mediaplayer但不工作 –

+0

然后把你的代码。 – Rahul

回答

0

你编码真奇怪在这里的错误。

你必须明白,创建活动的目的是不一样的运行活动。(通过任何方法eg.an意图)

所以,当你创建的GameMenuActivity对象将只运行活动的构造函数。

它不会运行onCreate()方法。

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

0

您声明您没有使用服务,但在您的场景中,最好的办法是使用服务,因为您正在创建2个不同的mediaplayer实例。你在一个尚未开始的媒体播放器上调用stop来获得空指针。将媒体播放器放入一个服务中,它会让你停下来。你

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();

+0

我得到了我的问题的解决方案 –

+0

,而不是在gamemenuactivity中创建媒体方法,我写了mediaplayer在创建它自己现在它工作感谢您的支持 –