Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有没有办法让AsyncTask更具可移植性?_Android_Android Asynctask - Fatal编程技术网

Android 有没有办法让AsyncTask更具可移植性?

Android 有没有办法让AsyncTask更具可移植性?,android,android-asynctask,Android,Android Asynctask,目前,AsyncTask确实让我的代码乱七八糟。我需要用它来做点什么,doInBackground部分在不同的代码段中使用。但是,onPostExecute会发生变化 我不想将所有内容都输入到一种方法中,例如: function doThis(String tag) { new AsyncTask<String, Void, String>() { @Override protected String doInBackground(Void... para

目前,AsyncTask确实让我的代码乱七八糟。我需要用它来做点什么,doInBackground部分在不同的代码段中使用。但是,onPostExecute会发生变化

我不想将所有内容都输入到一种方法中,例如:

function doThis(String tag) {

    new AsyncTask<String, Void, String>() {

    @Override
    protected String doInBackground(Void... params) {
        // Do that thing that needs to be done.
    }

    @Override
    onPostExecute(String message) {

        if (tag.equals("login")) {
          // Do large segment of logging in code.
        } else if (tag.equals("register")) {
          // Do other large segment of registering code
        } ... //and it goes on   
    }
}
函数点此(字符串标记){
新建异步任务(){
@凌驾
受保护字符串doInBackground(无效…参数){
//做该做的事。
}
@凌驾
onPostExecute(字符串消息){
if(tag.equals(“登录”)){
//执行大部分登录代码。
}else if(标记等于(“寄存器”)){
//做其他大段的注册代码
}…//事情还在继续
}
}

还有其他方法吗?或者,有没有更好的方法在后台完成工作后等待处理?

您可以创建一个单独的类来扩展AsyncTask。然后创建一个接口,您的活动可以实现该接口,其方法可以在onPostExecute内调用。但是,您需要传递活动对这个新类的引用。

一种方法:继承

abstract class BaseTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(Void... params) {
        // Do that thing that needs to be done.
    }
}

其他任务类型也是如此。

我明白这一点……但如果您在一个活动中有多个异步任务的需求……即:一个屏幕上有10个按钮,所有按钮都执行不同的操作,但所有按钮都需要对http请求使用asynctask……您将创建10个不同的类……对吗?
class LoginTask extends BaseTask {
    @Override
    onPostExecute(String message) {
        // just the "login" part here
    }
}