Android generic Asynctask

后端 未结 2 582
孤独总比滥情好
孤独总比滥情好 2021-01-16 02:17

I currently have multiple activity that needs to perform an asynctask for http post and I wish to make the asynctask as another class file so that the different activity can

2条回答
  •  星月不相逢
    2021-01-16 02:35

    Create an Interface called HttpResponseImpl in a seperate file and add the required method httpResult

    interface HttpResponseImpl{
        public void httpResult(String result);
    }
    

    Now implement this interface by you Activity class

    public class MyActivity extends Activity implements HttpResponseImpl{
    
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_MyActivity);
    
        //logic here...
        AsyncHttpPost asyncHttpPost = new AsyncHttpPost("someContent", this, dialog);
        JSONObject data = new JSONObject();
        data.put("key", "value");
        try {
                asyncHttpPost.execute(data);
            }
            catch (Exception ex){
            ex.printStackTrace();
            }
        }
    
        public void httpResult(String result){
            //this method has to get called by asynctask to make changes to the UI
        }
    }
    

    And your AsyncHttpPost class would be.

    public class AsyncHttpPost extends AsyncTask {
    String recvdjson;
    String mData="";
    private ProgressDialog dialog;
    private HttpResponseImpl httpResponseImpl;
    
    
    public AsyncHttpPost(String data, HttpResponseImpl httpResponseImpl, ProgressDialog dialog) {
        mData = data;
        this.httpResponseImpl = httpResponseImpl;
        this.dialog = dialog;
    }
    
    protected void onPreExecute()
    {
    
        dialog.show();
    }
    
        @Override
        protected String doInBackground(JSONObject... params) {
    
           //logic to do http request
               return "someStringResult";
    
        }
    
        protected void onPostExecute(String result) {
            dialog.dismiss();
            httpResponseImpl.httpResult(result); 
    
    
        }
    }
    

    Implements this HttpResponseImpl interface with all you Activity class from which you want to do HttpRequest.

提交回复
热议问题