android – 使用Asynctask调用多个函数进行网络连接

我想建立一个每次我想做网络连接的类,我会用它.
我想首先打开一个对话框,然后建立网络连接(或者从sql获取内容或从Web下载或更新sql),然后关闭对话框.

我需要等待功能结束才能继续.

我想使用AsyncTask,但我无法找到一种方法来确定在AsyncTask中使用哪个函数.我找到了两个解决方案,switch-case或尝试使用java反射发送函数.两种解决方案都不太好.

有人有另一种想法或其他方式来做到这一点?

解决方法:

考虑使用Command设计模式.
Here is Java example.您可以通过回调对其进行扩展,以便在完成后台工作后执行某些操作.

public abstract class Command {

    protected AsyncTaskCallback callback;

    public Command(AsyncTaskCallback callback) {
            this.callback = callback;
    }

    public abstract void execute();

    public AsyncTaskCallback getCallback() {
        return callback;
    }

    public interface AsyncTaskCallback {
        public void onPreExecute();
        public void onPostExecute();
    }

}

祈求:

public class Invoker extends AsyncTask<Void, Void, Void> {

    private Command command;

    public static void execute(Command command) {
            new Invoker(command).execute();
    }

    private Invoker(Command command) {
            this.command = command;
    }

    @Override
    protected Void doInBackground(Void... params) {
            return command.execute();
    }

    @Override
    protected void onPreExecute() {
            if (command.getCallback() != null) {
                    command.getCallback().onPreExecute();
            }
    }

    @Override
    protected void onPostExecute(Void result) {
            if (command.getCallback() != null) {
                    command.getCallback().onPostExecute();
            }
    }

}

因此,您的AsyncTask不知道它正在执行哪个命令,因此可以在整个应用程序中使用.现在,您可以在Activity中实现接口AsyncTaskCallback,并处理所有与UI相关的内容.

例:

public class MyActivity extends Activity implements AsyncTaskCallback {

...

public void onPreExecute() {
    showProgress();
}

public void onPostExecute() {
    hideProgress();
    doOtherThings();
}

...

Command myCommand = new Command(this) {
    @Override
    public void execute() {
        // Do specific background work
    }
}
Invoker.execute(command);

你还需要处理orientation changes.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...