How to run the same asynctask more than once?

前端 未结 12 2062
难免孤独
难免孤独 2020-12-01 03:32

I have my asyncTask run when the activity first starts, then if network connectivity is not available then i have a refresh button that tries to run the asyncTask to try aga

12条回答
  •  天命终不由人
    2020-12-01 03:51

    I created an Arraylist of type ProgressUpdater(Name of class which extends AsyncTask) and added the instances into it(in the onClick of a button). So you can execute and cancel these task when needed.

    public class MainActivity extends Activity {
    ProgressBar progress;
    ProgressUpdater task;
    ArrayList pu = new ArrayList();
    int count = 0;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progress = (ProgressBar) findViewById(R.id.progress);
    
    }
    
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn:
            task = new ProgressUpdater();
            pu.add(task);
            count++;
            pu.get(count - 1).execute(0);
            System.out.println("task" + task);
    
            // task.execute(10);
            break;
        case R.id.btnCancel:
            if (count >= 0) {
                pu.get(count - 1).cancel(true);
                pu.remove(count - 1);
                count--;
            }
            // task.cancel(true);
    
            break;
    
        }
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    private class ProgressUpdater extends AsyncTask {
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            progress = (ProgressBar) findViewById(R.id.progress);
            progress.setMax(100);
        }
    
        @Override
        protected Void doInBackground(Integer... params) {
            // TODO Auto-generated method stub
            int start = params[0];
            for (int i = start; i <= 100; i++) {
                try {
                    boolean cancelled = isCancelled();
                    if (!cancelled) {
                        publishProgress(i);
                        SystemClock.sleep(100);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            Log.v("Progress", "Finished");
        }
    
        @Override
        protected void onCancelled() {
            // TODO Auto-generated method stub
            super.onCancelled();
            progress.setMax(0);
    
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
            progress.setProgress(values[0]);
        }
    
    }
    

    }

提交回复
热议问题