multithreading - Store all the information at once using Realm in Background thread Android -


i developing android app, using relam local database. have rest api 1 user information , other news information. have 2 buttons. 1 showing user information , other showing news information. now, code done, after login, need click button @ first user information , news information accordingly , can see images , news. if connection off, after login, data not showing in view. explaining code in detail.also having problem in image loading. how can make funtionality user can information after login.i reallly sorry such long code. helpful me if tell me how can modify code store data in background thread, user information after login.

the part of login page want start

private void loginuser(final string memail, final string mpassword) {      final globalclass globalclass = new globalclass();     globalclass.setemail_info( memail );      setfilepath();      requestqueue queue = volley.newrequestqueue( loginpage.this );      stringrequest strreq = new stringrequest( request.method.post,             login_url, new response.listener<string>() {          @override         public void onresponse(string response) {             log.d( tag, "register response: " + response.tostring() );              //parse response here             if (response.contains( "overview" )) {                 showprogress( true );                  globalclass.setimage_urlpath( constants.http.photo_url + memail);                 string str = globalclass.readdatafromstorage();                 log.d("----after login---",str);                 if ( !str.contains("activate") ) {                    log.d( "----after login---", "after login" );                  }                  sharedpreferences.editor editor = sharedpreferences.edit();                 editor.putstring(key_email, memail);                 editor.putstring(key_password, mpassword);                 editor.commit();                  showprogress(false);                 intent loginintent = new intent(loginpage.this, mainoptionpage.class);                 loginintent.putextra(key_email, memail);                 startactivity(loginintent);              } else {                 useremail.seterror(getstring(r.string.error_incorrect_login));                 useremail.requestfocus();              }         }      }, new response.errorlistener() {         @override        .... 

here code user page

    public class mycolleaguespage extends appcompatactivity implements colleaguecontroller.usercallbacklistener {       private list<mycolleaguemodel> mycolleaguelist = new arraylist<>();      private realm colleaguerealm;     private realmresults<mycolleaguemodel> colleagueresult;      private list<mycolleaguemodel> filteredmodellist;     private realmchangelistener realmlistener;     private static final string dialog_tag = "employeedialog";      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.mycolleagues_layout);            configviews();      }      private void configviews() {         recyclerview = this.findviewbyid(r.id.colleagues_recycler);         recyclerview.sethasfixedsize(true);         recyclerview.setlayoutmanager(new linearlayoutmanager(mycolleaguespage.this));         recyclerview.setrecycledviewpool(new recyclerview.recycledviewpool());          colleaguerealm = realm.getdefaultinstance();          realmresults<mycolleaguemodel> results = colleaguerealm.where(mycolleaguemodel.class).findall();          (int = 0; < results.size(); i++) {              mycolleaguelist.add(results.get(i));         }         adapter = new mycolleaguesadapter(mycolleaguelist,getapplicationcontext());         //adapter = new mycolleaguesadapter(mycolleaguelist,getapplicationcontext());         log.d( "adapter value is"+"", string.valueof( adapter ) );         recyclerview.setadapter(adapter);     }       //successful     @override     public void onfetchstart() {      }      @override     public void onfetchprogress(colleaguemodel colleague) {         //adapter.addcolleague(colleague);     }      @override     public void onfetchprogress(list<colleaguemodel> colleaguelist) {      }      @override     public void onfetchcomplete() {      }      @override     public void onfetchfailed() {      }    } 

here controller class colleague page

    public class colleaguecontroller {      private static final string tag = colleaguecontroller.class.getsimplename();     private usercallbacklistener mlistener;     private colleagueresapimanager mapimanager;       realm mycolleague_realm;         public colleaguecontroller() {         mapimanager = new colleagueresapimanager();     }   public void startfetching(){     mycolleague_realm = realm.getdefaultinstance();      mapimanager.getcolleagueapi().getcolleague(new callback<string>() {         @override         public void success(string s, response response) {             log.d(tag, "json :: " + s);             try {                 jsonarray array = new jsonarray(s);                  for(int = 0; < array.length(); i++) {                     jsonobject object = array.getjsonobject(i);                     log.d("-----start fetching---", object.optstring( "name" ));                          mycolleague_realm.begintransaction();                         mycolleaguemodel mycolleague = mycolleague_realm.createobject( mycolleaguemodel.class );                         mycolleague.setname( object.optstring( "name" ) );                        .... data  ) );                        mycolleague_realm.committransaction();                  }              } catch (jsonexception e) {                 mlistener.onfetchfailed();             }             // mlistener.onfetchcomplete();         }         @override         public void failure(retrofiterror error) {             log.d(tag, "error :: " + error.getmessage());             if (mlistener != null) {                 mlistener.onfetchcomplete();             }         }     });  }         public interface usercallbacklistener{          void onfetchcomplete();         void onfetchfailed();     } } 

in same way have other page news option page shoing news data. here news page.

    public class newspage extends appcompatactivity{      private recyclerview recyclerview;     private newsadapter adapter;     private realm newsrealm;       private list<newsrealmmodel> mnewslist;     private list<newsrealmmodel> filteredmodellist;      private newscontroller mcontroller;      constant constant;     sharedpreferences app_preferences;     int apptheme;     int themecolor;     int appcolor;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview( r.layout.news_page_layout);            configviews();      }      private void configviews() {         recyclerview = this.findviewbyid(r.id.news_recycler);         recyclerview.sethasfixedsize(true);         recyclerview.setlayoutmanager(new linearlayoutmanager(newspage.this));         recyclerview.setrecycledviewpool(new recyclerview.recycledviewpool());          realm newsrealm = realm.getdefaultinstance();         realmresults<newsrealmmodel> temp = newsrealm.where(newsrealmmodel.class).findall();         mnewslist = new arraylist<>();         (int = 0; < temp.size(); i++) {              mnewslist.add(temp.get(i));         }          adapter = new newsadapter(mnewslist,getapplicationcontext());         log.d( "adapter value is"+"", string.valueof( adapter ) );         recyclerview.setadapter(adapter);      }      }  

and new controller class

public class newscontroller { private static final string tag = newscontroller.class.getsimplename(); private usercallbacklistener mlistener; private newsrestapimanager mapimanager; private appimage appimages;  realm mynews_realm; arraylist<string> title_list = new arraylist<>(); globalclass globalclass = new globalclass();  public newscontroller(usercallbacklistener listener) {     mlistener = listener;     mapimanager = new newsrestapimanager(); }   public void startfetching() {     mynews_realm = realm.getdefaultinstance();     mapimanager.getnewsapi().getnews(new callback<string>() {          @override         public void success(string s, response response) {             log.d(tag, "json :: " + s);              try {                 jsonarray array = new jsonarray(s);                  (int = 0; < array.length(); i++) {                     jsonobject jsonobject = array.getjsonobject(i);                     log.d("-----start fetching---", jsonobject.optstring("title"));                      if (!mynews_realm.isintransaction()) {                          mynews_realm.begintransaction();                          newsrealmmodel news = new newsrealmmodel();                        ....... data                          }                          mynews_realm.copytorealm(news);                         mynews_realm.committransaction();                          mlistener.onfetchprogressnews(news);                      } else {                         mynews_realm.committransaction();                     }                   }             } catch (jsonexception e) {                 mlistener.onfetchfailed();             }              mlistener.onfetchcomplete();         }          @override         public void failure(retrofiterror error) {             log.d(tag, "error :: " + error.getmessage());             mlistener.onfetchcomplete();         }     });  } public interface usercallbacklistener {       void onfetchprogressnews(newsrealmmodel news);        void onfetchcomplete();      void onfetchfailed(); } 

}

to database processing on background thread using volley, need extend request<t> , realm write in parsenetworkresponse method.

public class realmgsonobjectrequest<t, m extends realmmodel> extends response<void> {   ...   @override   protected response<void> parsenetworkresponse(                             networkresponse response) {     try {       string json = new string(response.data,           httpheaderparser.parsecharset(response.headers));       t data = gson.fromjson(json, clazz);        // write downloaded data realm on bg thread       try(realm r = realm.getdefaultinstance()) {         m model = mapper.tomodel(data);         r.executetransaction((realm) -> {           realm.insertorupdate(model);         });       }        return response.success(null,          httpheaderparser.parsecacheheaders(response)       );     } // handle errors } 

you might need realmgsonlistrequest well.

public class realmgsonlistrequest<t, m extends realmmodel> extends response<void> {   ...   @override   protected response<void> parsenetworkresponse(                             networkresponse response) {     try {       string json = new string(response.data,           httpheaderparser.parsecharset(response.headers));       list<t> data = gson.fromjson(json, new typetoken<arraylist<t>>() {}.gettype());        // write downloaded data realm on bg thread       try(realm r = realm.getdefaultinstance()) {         m model = mapper.tomodel(data);         r.executetransaction((realm) -> {           realm.insertorupdate(model);         });       }        return response.success(null,          httpheaderparser.parsecacheheaders(response)       );     } // handle errors } 

for more information, refer official volley tutorial on how create custom volley request type.


Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -