如何将函数作为参数传递给AsynTask

时间:2017-03-07 18:40:49

标签: java android android-asynctask

因为我是android开发的新手,我需要为我的http请求提供一个asynctask类。我在一个活动中有很多http请求函数类型,我想让它变得动态。所以我想只创建一个可以运行我所有功能的AsyncTask函数。

所以这就是例子

  private class WebServiceCall extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        pBar.setVisibility(View.VISIBLE);
        pBar.setIndeterminate(false);
        pBar.setClickable(false);
    }
    @Override
    protected Void doInBackground(Void... params) {
        // a function that i passed
       Function01();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        try{
         some code
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        pBar.setClickable(true);
        pBar.setVisibility(View.GONE);
    }

}

我只是这样打电话

Oncreate(
new WebServiceCall().execute(function01());

任何帮助和代码示例都会受到赞赏, 感谢

3 个答案:

答案 0 :(得分:2)

我不知道function作为另一个函数的参数是什么意思!

但您可以将Interfaces用于此目的。

例如:

创建一个可以在onPostExecute()

中调用的回叫接口
public interface ResponseCallback {

    void onRespond();
}

并在调用asynckTask之前定义它:

   ResponseCallback callback = new ResponseCallback() {
            @Override
            public void onRespond() {
              //code to be done after calling it from onPostExecute
            }
        };

并将callback传递给constructor的{​​{1}}并在asynckTask

中调用它

当然,您可以将onPostExecute的签名修改为您想要的内容。

答案 1 :(得分:0)

使用您的函数发送类对象,并从AsyncTask中的对象调用函数。

public class A
{
//your function
int function()
{
return...;
}
}

private class WebServiceCall extends AsyncTask<Void, Void, Void> {
    A myobj;
    WebServiceCall(A mycustomslass)
    {
         myobj = mycustomclass;
    }
    @Override
    protected void onPreExecute() {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        pBar.setVisibility(View.VISIBLE);
        pBar.setIndeterminate(false);
        pBar.setClickable(false);
    }
    @Override
    protected Void doInBackground(Void... params) {
        // a function that i passed

        int cur = myobj.function();//this your function
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        try{
         some code
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        pBar.setClickable(true);
        pBar.setVisibility(View.GONE);
    }

}

你可以像

一样打电话
Oncreate(
new WebServiceCall(new A()).execute();
)

答案 2 :(得分:0)

这并没有直接解决你的问题,但是我建议你研究一下相当好的广告问题,将AsyncTask用于任何可能需要花费几毫秒的时间,以及几个非常好的HTTP / REST框架。 Android,例如改造。

相关问题