Java 使所有Asynctask类的onPreExecute和onProgressUpdate公用

Java 使所有Asynctask类的onPreExecute和onProgressUpdate公用,java,android,android-asynctask,Java,Android,Android Asynctask,目前,我在android应用程序中工作,因为我有10个单独的Asynctask类用于10个单独的操作,在onPreExecute()和onProgressUpdate()中调用的用户定义函数对于所有10个Asynctask类都是相同的。有没有其他方法可以简化这一点。例如,我有一个名为“ADD”的用户定义函数,到目前为止,我已经在所有10个Asynctask类的onPreExecute()中调用了“ADD”函数,是否有其他方法来简化此过程,通过使用interface或任何其他方法,创建一个扩展As

目前,我在android应用程序中工作,因为我有10个单独的Asynctask类用于10个单独的操作,在onPreExecute()和onProgressUpdate()中调用的用户定义函数对于所有10个Asynctask类都是相同的。有没有其他方法可以简化这一点。例如,我有一个名为“ADD”的用户定义函数,到目前为止,我已经在所有10个Asynctask类的onPreExecute()中调用了“ADD”函数,是否有其他方法来简化此过程,通过使用interface或任何其他方法,创建一个扩展Asynctask的BaseAyncTask类。 并在此基础上编写onPreExecute()和onProgressUpdate()的实现

public abstract class BaseAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {

        @android.support.annotation.Nullable
        private ProgressDialog progressDialog = null;
        public Activity activity;

        public BaseAsyncTask(Activity activity) {
            this.activity = activity;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(activity, R.style.CustomProgressSpinner);
            CommonUtilities.showDialog(progressDialog,activity);
        }

    @Override
    protected void onProgressUpdate(Progress... values) {
        super.onProgressUpdate(values);
    }

        @Override
        protected void onPostExecute(Result result) {
            super.onPostExecute(result);
            CommonUtilities.dismissDialog(progressDialog);
        }
    }
公共抽象类BaseAsyncTask扩展了AsyncTask{
@android.support.annotation.Nullable
private ProgressDialog ProgressDialog=null;
公共活动;
公共BaseAsyncTask(活动){
这个。活动=活动;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(活动,R.style.CustomProgressSpinner);
CommonUtilities.showDialog(progressDialog,activity);
}
@凌驾
受保护的void onProgressUpdate(进度…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(结果){
super.onPostExecute(结果);
CommonUtilities.dismissDialog(progressDialog);
}
}
在所有AsyncTask中扩展BaseAyncTask

public class AttachmentLoadTask extends BaseAsyncTask<DocumentVO, Void, File> {@Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected File doInBackground(DocumentVO... documentVOs) {
        File file = null;
        return file;
    }

    @Override
    protected void onProgressUpdate(Progress... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(File file) {

        super.onPostExecute(file);

    }}
公共类AttachmentLoadTask扩展BaseAncyncTask{@Override
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的文件doInBackground(DocumentVO…documentVOs){
File=null;
返回文件;
}
@凌驾
受保护的void onProgressUpdate(进度…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(文件){
super.onPostExecute(文件);
}}

创建一个扩展AsyncTask的BaseAyncTask类。 并在此基础上编写onPreExecute()和onProgressUpdate()的实现

public abstract class BaseAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {

        @android.support.annotation.Nullable
        private ProgressDialog progressDialog = null;
        public Activity activity;

        public BaseAsyncTask(Activity activity) {
            this.activity = activity;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(activity, R.style.CustomProgressSpinner);
            CommonUtilities.showDialog(progressDialog,activity);
        }

    @Override
    protected void onProgressUpdate(Progress... values) {
        super.onProgressUpdate(values);
    }

        @Override
        protected void onPostExecute(Result result) {
            super.onPostExecute(result);
            CommonUtilities.dismissDialog(progressDialog);
        }
    }
公共抽象类BaseAsyncTask扩展了AsyncTask{
@android.support.annotation.Nullable
private ProgressDialog ProgressDialog=null;
公共活动;
公共BaseAsyncTask(活动){
这个。活动=活动;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(活动,R.style.CustomProgressSpinner);
CommonUtilities.showDialog(progressDialog,activity);
}
@凌驾
受保护的void onProgressUpdate(进度…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(结果){
super.onPostExecute(结果);
CommonUtilities.dismissDialog(progressDialog);
}
}
在所有AsyncTask中扩展BaseAyncTask

public class AttachmentLoadTask extends BaseAsyncTask<DocumentVO, Void, File> {@Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected File doInBackground(DocumentVO... documentVOs) {
        File file = null;
        return file;
    }

    @Override
    protected void onProgressUpdate(Progress... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(File file) {

        super.onPostExecute(file);

    }}
公共类AttachmentLoadTask扩展BaseAncyncTask{@Override
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的文件doInBackground(DocumentVO…documentVOs){
File=null;
返回文件;
}
@凌驾
受保护的void onProgressUpdate(进度…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(文件){
super.onPostExecute(文件);
}}

使用onPreExecute()和onProgressExecute()中的操作创建一个基本异步任务。然后创建异步任务类(从基本异步任务扩展)。

使用onPreExecute()和onProgressExecute()中的操作创建基本异步任务。然后创建异步任务类(从基本异步任务扩展而来)。

当然,您可以为所有异步任务调用创建一个类

只需创建一个类

 public class MyConnectionClass extends AsyncTask<Uri, Void, Boolean> {
    MyAsyncInterface delegate = null;
    HttpURLConnection httpURLConnection;
    String output;

    public MyConnectionClass(MyAsyncInterface myAsyncInterface) {
        delegate = myAsyncInterface;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        delegate.processFinish(output);
        super.onPostExecute(aBoolean);

    }

    @Override
    protected Boolean doInBackground(Uri... uris) {
        try {
            URL url = new URL(uris[0].toString());
            httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.connect();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
            String line = null;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                builder.append(line);

            }
            output = builder.toString();
            return true;


        } catch (MalformedURLException e) {
            output = e.getMessage();
            return false;

        } catch (IOException e) {
            output = e.getMessage();
            return false;

        } finally {
            httpURLConnection.disconnect();
        }

    }
}

然后在活动中创建一个Uri并实现MyAsyncInterface,然后在onPostExecute调用processFinish中实现,并将输出传递给调用活动中的processFinish(字符串输出)方法。当然,您可以为所有Asynctask调用创建一个类

只需创建一个类

 public class MyConnectionClass extends AsyncTask<Uri, Void, Boolean> {
    MyAsyncInterface delegate = null;
    HttpURLConnection httpURLConnection;
    String output;

    public MyConnectionClass(MyAsyncInterface myAsyncInterface) {
        delegate = myAsyncInterface;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        delegate.processFinish(output);
        super.onPostExecute(aBoolean);

    }

    @Override
    protected Boolean doInBackground(Uri... uris) {
        try {
            URL url = new URL(uris[0].toString());
            httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.connect();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
            String line = null;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                builder.append(line);

            }
            output = builder.toString();
            return true;


        } catch (MalformedURLException e) {
            output = e.getMessage();
            return false;

        } catch (IOException e) {
            output = e.getMessage();
            return false;

        } finally {
            httpURLConnection.disconnect();
        }

    }
}

然后在活动中创建Uri并实现MyAsyncInterface,然后在onPostExecute调用processFinish中实现,并将输出传递给调用活动中的processFinish(字符串输出)方法做得再好不过了你的答案好多了再好不过了