Android Activity onCreate Being Called Twice When Navigated Back From Another Activity -


i have app generates music after user authenticates oauth on webview activity, looking this: main player activity-oauth activity-back main player activity. however, oncreate method being called twice when going oauth activity, resulting in 2 audio tracks generated , played @ same time. here's part of code mainactivity:

public class mainactivity extends activity { int pitch=60; private static final float visualizer_height_dip = 50f; random rn;  boolean isrunning = true;   boolean isplaying=false; seekbar fslider; double sliderval; mediaplayer mediaplayer=new mediaplayer(); imagebutton startstopbutton; imagebutton stopbutton; seekbar vslider; visualizerview mvisualizerview; private visualizer mvisualizer; imagebutton connectbutton; @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);    // point slider gui widget     rn = new random();     fslider = (seekbar) findviewbyid(r.id.frequency);             fslider.setprogress(0);     vslider= (seekbar) findviewbyid(r.id.seekbar2);     vslider.setmax(10);     vslider.setprogress(0);     textview viewinterval=(textview) findviewbyid(r.id.textview2);          viewinterval.settext("");     startstopbutton=(imagebutton) findviewbyid(r.id.imagebutton2);     view activity= this.findviewbyid(r.id.playeractivity);      stopbutton=(imagebutton) findviewbyid(r.id.imagebutton1);     relativelayout.layoutparams params= new relativelayout.layoutparams(layoutparams.match_parent, (int)(visualizer_height_dip * getresources().getdisplaymetrics().density));     params.addrule(relativelayout.below, r.id.seekbar2);     mvisualizerview = new visualizerview(this);     mvisualizerview.setlayoutparams(params);     ((viewgroup) activity).addview(mvisualizerview);     connectbutton=(imagebutton) findviewbyid(r.id.imagebutton3);     connectbutton.setonclicklistener(new onclicklistener(){          @override         public void onclick(view arg0) {             mediaplayer.pause();             intent intent= new intent(getapplicationcontext(), webviewactivity.class);             startactivity(intent);         }                });     if(riskscores.length !=0){         viewinterval.settext("generating audio");         new midisequence().execute();                }    };  @override public boolean oncreateoptionsmenu(menu menu) {     getmenuinflater().inflate(r.menu.main, menu);     return true; }   @override protected void onpause() {     super.onpause();     if(mediaplayer.isplaying()){         mediaplayer.pause();     } }  class midisequence extends asynctask<string,void,string>{ 

here's code oauth activity

public class webviewactivity extends activity { private webview gwebview; final string redirect_uri = "https://localhost:5000/receive_code"; final string client_id = "can't post here"; final string client_secret = "can't post here"; final string scope = "basic names genomes analyses";  public void oncreate(bundle savedinstancestate){     super.oncreate(savedinstancestate);     setcontentview(r.layout.webview);      gwebview = (webview) findviewbyid(r.id.webview1);      gwebview.loadurl("https://api.23andme.com/authorize/?redirect_uri="             + redirect_uri + "&response_type=code&client_id=" + client_id             + "&scope=" + scope);      log.d("webview", "got webpage");      gwebview.setwebviewclient(new webviewclient() {          @override         public void onpagestarted(webview view, string url, bitmap favicon) {             // todo auto-generated method stub             super.onpagestarted(view, url, favicon);         }          @override         public void onpagefinished(webview view, string url) {             super.onpagefinished(view, url);             if (url.startswith(redirect_uri)) {                 log.d("webview", "onpagefinished called");                 system.out.println("got override");                 if (url.indexof("code=") != -1) {                     //if query contains code                     string querystring = null;                     try {                         querystring = new url(url).getquery();                     } catch (malformedurlexception e) {                         // todo auto-generated catch block                         e.printstacktrace();                     }                     system.out.println(querystring);                     string[] params = querystring.split("&");                     string code = null;                     (string param : params) {                         if (param.startswith("code=")) {                             code = param.substring(param.indexof('=') + 1);                         }                     }                     gwebview.setvisibility(view.gone);                     new postrequest().execute(code);                     // don't go redirecturi                 }             }         }     });   } class postrequest extends asynctask<string,void,string>{       @override     protected string doinbackground(string... params) {                code retrieving client data.....               } catch (clientprotocolexception e) {                 // todo auto-generated catch block                 system.out.println("cpe" + e);             } catch(socketexception ex)                {                  log.e("error : " , "error on soapprimitivedata() " + ex.getmessage());                    ex.printstacktrace();                    return "error occured";                } catch (jsonexception e) {                 e.printstacktrace();                 return "error occured";             } catch (illegalstateexception e) {                 e.printstacktrace();                 return "error occured";             } catch (ioexception e) {                 // todo auto-generated catch block                 e.printstacktrace();                 return "error occured";             }         }         return "request complete";     }      @override     protected void onpostexecute(string result) {                super.onpostexecute(result);         log.d("post result", result);         intent intent = new intent(getapplicationcontext(), mainactivity.class);         startactivity(intent);     }  } 

} oncreate method of mainactivity called twice reason... going on here?

there seems mistake in implementation. thing is, trying use intent object navigate mainactivity form webactvitity. problem. shouldn't doing that.

whenever wanna move previous activity, should calling finish() in current activity.

in our scenario,the using intent in webactivity creating new instance mainactivity exists in stack(background). calling finish() in webactivity should close , mainactivity should visible.

do following changes,

@override protected void onpostexecute(string result) {            super.onpostexecute(result);     log.d("post result", result);     intent intent = new intent(getapplicationcontext(), mainactivity.class);     startactivity(intent); } 

replace above method this,

@override protected void onpostexecute(string result) {            super.onpostexecute(result);     log.d("post result", result);     finish(); } 

Comments

Popular posts from this blog

ios - UICollectionView Self Sizing Cells with Auto Layout -

node.js - ldapjs - write after end error -

DOM Manipulation in Wordpress (and elsewhere) using php -