java - Mediaplayer gets stucked after too many replays -
i programmed quiz 1 question, 3 choices , 1 correct answer. questions shuffling , on click on correct choices mediaplayer plays sound, on false choice plays other sound , switches activity menu2. there button (replay quiz) restarts activity one. when user sequence: (false choice redirected menu2 , clicks on button restart quiz) fast , several times sound not play anymore, user must close application , wait several minutes till sound works again.
quiz activity (activity1)
public class quizactivity extends appcompatactivity { private actionbardrawertoggle mtoggle; private questionlibrary mquestionlibrary = new questionlibrary(); private textview mscoreview; private textview mquestionview; private button mbuttonchoice1; private button mbuttonchoice2; private button mbuttonchoice3; private string manswer; private int mscore = 0; private int mquestionnumber = 0; dialog dialog; dialog dialog2; textview closebutton; textview closebutton2; checkbox checkboxmp; sharedpreferences mypref; sharedpreferences.editor editor; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_quiz); final mediaplayer mp = new mediaplayer(); final mediaplayer mp2 = mediaplayer.create(this,r.raw.wrong); //dialog 1 createdialog(); button dialogbutton = (button) findviewbyid(r.id.dialogbtn); dialogbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { dialog.show(); } }); closebutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { dialog.dismiss(); } }); //end dialog 1 //dialog 2 createdialog2(); button dialogbutton2 = (button) findviewbyid(r.id.dialogbtn2); dialogbutton2.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { dialog2.show(); } }); closebutton2.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { dialog2.dismiss(); } }); //end dialog 2 sharedpreferences mypref = getpreferences(mode_private); final sharedpreferences.editor editor = mypref.edit(); checkboxmp.setoncheckedchangelistener(new compoundbutton.oncheckedchangelistener() { @override public void oncheckedchanged(compoundbutton buttonview,boolean ischecked) { editor.putboolean("playsounds", !ischecked); editor.commit(); if (!ischecked){ mp.setvolume(1,1); mp2.setvolume(1,1); }else{ mp.setvolume(0,0); mp2.setvolume(0,0); } } }) ; boolean playsounds = mypref.getboolean("playsounds", false); checkboxmp.setchecked(!playsounds); if(playsounds){ mp.setvolume(1,1); mp2.setvolume(1,1); } else{ mp.setvolume(0,0); mp2.setvolume(0,0); } textview sharetextview = (textview) findviewbyid(r.id.share); sharetextview.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent myintent = new intent(intent.action_send); myintent.settype("text/plain"); myintent.putextra(intent.extra_subject, "hello!"); myintent.putextra(intent.extra_text, "my highscore in quizzi high! bet can't beat me except cleverer me. download app now! https://play.google.com/store/apps/details?id=amapps.impossiblequiz"); startactivity(intent.createchooser(myintent, "share with:")); } }); mquestionlibrary.shuffle(); setsupportactionbar((toolbar) findviewbyid(r.id.nav_action)); drawerlayout mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawerlayout); mtoggle = new actionbardrawertoggle(this, mdrawerlayout, r.string.open, r.string.close); mdrawerlayout.adddrawerlistener(mtoggle); mtoggle.syncstate(); getsupportactionbar().setdisplayhomeasupenabled(true); // able see navigation burger "button" ((navigationview) findviewbyid(r.id.nv1)).setnavigationitemselectedlistener(new navigationview.onnavigationitemselectedlistener() { @override public boolean onnavigationitemselected(menuitem menuitem) { switch (menuitem.getitemid()) { case r.id.nav_stats: startactivity(new intent(quizactivity.this, menu2.class)); break; case r.id.nav_about: startactivity(new intent(quizactivity.this, menu3.class)); break; } return true; } }); mscoreview = (textview) findviewbyid(r.id.score_score); mquestionview = (textview) findviewbyid(r.id.question); mbuttonchoice1 = (button) findviewbyid(r.id.choice1); mbuttonchoice2 = (button) findviewbyid(r.id.choice2); mbuttonchoice3 = (button) findviewbyid(r.id.choice3); final list<button> choices = new arraylist<>(); choices.add(mbuttonchoice1); choices.add(mbuttonchoice2); choices.add(mbuttonchoice3); updatequestion(); (final button choice : choices) { choice.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { if (choice.gettext().equals(manswer)) { try { mp.reset(); assetfiledescriptor afd; afd = getassets().openfd("sample.mp3"); mp.setdatasource(afd.getfiledescriptor(),afd.getstartoffset(),afd.getlength()); mp.prepare(); mp.start(); } catch (illegalstateexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } updatescore(); updatequestion(); toast.maketext(quizactivity.this, "correct", toast.length_short).show(); } else { mp2.start(); toast.maketext(quizactivity.this, "wrong... try again!", toast.length_short).show(); intent intent = new intent(quizactivity.this, menu2.class); intent.putextra("score", mscore); // pass score menu2 startactivity(intent); } } }); } } private void updatequestion() { if (mquestionnumber < mquestionlibrary.getlength()) { mquestionview.settext(mquestionlibrary.getquestion(mquestionnumber)); mbuttonchoice1.settext(mquestionlibrary.getchoice1(mquestionnumber)); mbuttonchoice2.settext(mquestionlibrary.getchoice2(mquestionnumber)); mbuttonchoice3.settext(mquestionlibrary.getchoice3(mquestionnumber)); manswer = mquestionlibrary.getcorrectanswer(mquestionnumber++); } else { toast.maketext(quizactivity.this, "last question! intelligent!", toast.length_short).show(); intent intent = new intent(quizactivity.this, menu2.class); intent.putextra("score", mscore); startactivity(intent); } } private void updatescore() { mscoreview.settext(string.valueof(++mscore)); sharedpreferences mypref = getpreferences(mode_private); int highscore = mypref.getint("highscore", 0); if (mscore > highscore) { sharedpreferences.editor editor = mypref.edit(); editor.putint("highscore", mscore); editor.apply(); } } @override public boolean onoptionsitemselected(menuitem item) { return mtoggle.onoptionsitemselected(item) || super.onoptionsitemselected(item); } private void createdialog() { dialog = new dialog(this); dialog.settitle("tutorial"); dialog.setcontentview(r.layout.popup_menu1_1); closebutton = (textview) dialog.findviewbyid(r.id.closetxt); } private void createdialog2() { dialog2 = new dialog(this); dialog2.settitle("settings"); dialog2.setcontentview(r.layout.popup_menu1_2); closebutton2 = (textview) dialog2.findviewbyid(r.id.closetxt2); checkboxmp = (checkbox) dialog2.findviewbyid(r.id.ckeckbox); } } menu2(second activity)
public class menu2 extends appcompatactivity { private int mscore; private actionbardrawertoggle mtoggle; @override public void onbackpressed() { intent intent =new intent(menu2.this,quizactivity.class); startactivity(intent); } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_menu2); textview txtscore = (textview) findviewbyid(r.id.textscore2); textview txthighscore = (textview) findviewbyid(r.id.texthighscore); imageview trophy1 = (imageview) findviewbyid(r.id.trophy1); imageview trophy2 = (imageview) findviewbyid(r.id.trophy2); imageview trophy3 = (imageview) findviewbyid(r.id.trophy3); imageview trophy4 = (imageview) findviewbyid(r.id.trophy4); imageview trophy5 = (imageview) findviewbyid(r.id.trophy5); imageview trophy6 = (imageview) findviewbyid(r.id.trophy6); imageview genius60score = (imageview)findviewbyid(r.id.genius60img); imageview trophyimgbefore60 = (imageview)findviewbyid(r.id.statstrophy); intent intent = getintent(); mscore = intent.getintextra("score", 0); txtscore.settext(string.format("your score: %d", mscore)); sharedpreferences mypref = getpreferences(mode_private); int highscore = mypref.getint("highscore", 0); if (mscore > highscore) { highscore = mscore; txthighscore.settext(string.format("high score: %d", mscore)); sharedpreferences.editor editor = mypref.edit(); editor.putint("highscore", mscore); editor.apply(); } else { txthighscore.settext(string.format("high score: %d", highscore)); } if (highscore >= 10) { trophy1.setvisibility(view.visible); } if (highscore >= 20) { trophy2.setvisibility(view.visible); } if (highscore >= 30) { trophy3.setvisibility(view.visible); } if (highscore >= 40) { trophy4.setvisibility(view.visible); } if (highscore >=50) { trophy5.setvisibility(view.visible); } if (highscore >= 60) { trophy6.setvisibility(view.visible); trophyimgbefore60.setvisibility(view.gone); genius60score.setvisibility(view.visible); } final list<imageview> containers = new arraylist<>(); containers.add(trophy1); containers.add(trophy2); containers.add(trophy3); containers.add(trophy4); containers.add(trophy5); containers.add(trophy6); final list<integer> dialogs = new arraylist<>(); dialogs.add(r.layout.popup_menu2_1); dialogs.add(r.layout.popup_menu2_2); dialogs.add(r.layout.popup_menu2_3); dialogs.add(r.layout.popup_menu2_4); dialogs.add(r.layout.popup_menu2_5); dialogs.add(r.layout.popup_menu2_6); (int = 0; < containers.size(); i++) { final int j = i; containers.get(j).setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { final dialog dialog = new dialog(menu2.this); dialog.settitle("trophies"); dialog.setcontentview(dialogs.get(j)); dialog.show(); } }); } setsupportactionbar((toolbar) findviewbyid(r.id.nav_action)); drawerlayout drawerlayout = (drawerlayout) findviewbyid(r.id.drawerlayout2); mtoggle = new actionbardrawertoggle(this, drawerlayout, r.string.open, r.string.close); drawerlayout.adddrawerlistener(mtoggle); mtoggle.syncstate(); getsupportactionbar().setdisplayhomeasupenabled(true); navigationview mnavigationview = (navigationview) findviewbyid(nv2); mnavigationview.setnavigationitemselectedlistener(new navigationview.onnavigationitemselectedlistener() { @override public boolean onnavigationitemselected(@nonnull menuitem menuitem) { switch (menuitem.getitemid()) { case r.id.nav_home2: startactivity(new intent(menu2.this, quizactivity.class)); break; case r.id.nav_about2: startactivity(new intent(menu2.this, menu3.class)); break; } return true; } }); } @override public boolean onoptionsitemselected(menuitem item) { return mtoggle.onoptionsitemselected(item) || super.onoptionsitemselected(item); } public void onclick(view view) { intent intent = new intent(menu2.this, quizactivity.class); intent.putextra("score", mscore); startactivity(intent); } }
Comments
Post a Comment