gpt4 book ai didi

android - Android 中 ws 调用的通用异步任务

转载 作者:行者123 更新时间:2023-11-29 16:11:52 26 4
gpt4 key购买 nike

我正在使用 AsyncTask 类来执行 WS 方法。我想要一个通用的异步任务类来调用 WS 中的任何方法。

我创建了一组工作正常的类,但问题是当我必须更新 UI 时。我知道我可以使用对 Activity 类的引用创建异步任务,然后执行所需的方法,但我想要执行的方法也是一个参数。

否则,我必须为每个与 UI 交互的方法实现一个新类,因为每个操作都因方法而异。

可以证明,解决方案是结合使用 Listeners 和参数,但我没有找到如何使用它的完整示例。

最佳答案

在 Java 中,您不能将方法作为参数传递,但可以传递扩展或实现祖先并覆盖该方法的对象。命令模式使用了这个概念 (http://en.wikipedia.org/wiki/Command_pattern)。

这里有一个想法:

private static interface Command {
public void execute();
}

public static final class MyWsCommand1 implements Command {
@Override
public void execute() {
// TODO your WS code 1
}
}

public static final class MyWsCommand2 implements Command {
@Override
public void execute() {
// TODO your WS code 2
}
}

private static class GenericAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {

private Command command;

public GenericAsyncTask(Command command) {
super();
this.command = command;
}

@Override
protected Result doInBackground(Params... params) {
// TODO your code
command.execute();
// TODO your code
return null;
}

}

private GenericAsyncTask<Object, Object, Object> myAsyncTask1;
private GenericAsyncTask<Object, Object, Object> myAsyncTask2;

并在您的代码中使用它们:

myAsyncTask1 = new GenericAsyncTask<Object, Object, Object>(new MyWsCommand1());
myAsyncTask1.execute();

...

    myAsyncTask2 = new GenericAsyncTask<Object, Object, Object>(new MyWsCommand2());
myAsyncTask2.execute();

关于android - Android 中 ws 调用的通用异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com