android - Call AsyncTask from another class -


in existing app have activity inner class extends asynctask, looks following:

public class activity_1 extends baseactivity {     ....     new async().execute();     ...      public class asyncextends asynctask<void, void, string> {         protected string doinbackground(void... progress) { ... }         protected void onpreexecute() { ... }         protected void onpostexecute(string result) { ... }     } } 

now, need call same doinbackground-method activity, onpostexecute() of inner class operates on local ui variables , hence it's not possible use outside clas. there way can call asynctask, , override onpostexecute andonpreexecute-method, or shall create yet inner-class in other activity, same background thing (of course move common utility-class or something), etc...?

you can make separate abstract package private class, extending asynctask , implementing doinbackground() method:

abstract class myasynctask extends asynctask<void, void, string> {     @override     final protected string doinbackground(void... progress) {          // stuff, common both activities in here     } } 

and in activities inherit myasynctask (new class should private, way), implementing onpostexecute() , onpreexecute() methods:

public class activity_1 extends baseactivity {      ...     new async1().execute();     ...      private class async1 extends myasynctask {         @override         protected void onpreexecute(){              // activity 1 gui stuff         }          @override         protected void onpostexecute(string result) {             // activity 1 gui stuff         }     } } 

if onpreexecute , onpostexecute contain common actions well, can apply following pattern:

abstract class myasynctask extends asynctask<void, void, string> {     public interface myasynctasklistener {        void onpreexecuteconcluded();        void onpostexecuteconcluded(string result);       }      private myasynctasklistener mlistener;      final public void setlistener(myasynctasklistener listener) {        mlistener = listener;     }      @override     final protected string doinbackground(void... progress) {          // stuff, common both activities in here     }      @override     final protected void onpreexecute() {         // common stuff         ...         if (mlistener != null)              mlistener.onpreexecuteconcluded();     }      @override     final protected void onpostexecute(string result) {         // common stuff         ...         if (mlistener != null)              mlistener.onpostexecuteconcluded(result);     } } 

and use in activity following:

public class activity_1 extends baseactivity {      ...     myasynctask atask = new myasynctask();     atask.setlistener(new myasynctask.myasynctasklistener() {        @override        void onpreexecuteconcluded() {            // gui stuff        }         @override        void onpostexecuteconcluded(string result) {            // gui stuff        }     });     atask.execute();     ... }     

you can have activity implement myasynctasklistener well:

public class activity_1 extends baseactivity implements myasynctask.myasynctasklistener {     @override     void onpreexecuteconcluded() {         // gui stuff     }      @override     void onpostexecuteconcluded(string result) {        // gui stuff     }      ...     myasynctask atask = new myasynctask();     atask.setlistener(this);     atask.execute();     ...  } 

i wrote code head, might contain errors, should illustrate idea.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -