因为我是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());
)
任何帮助和代码示例都会受到赞赏, 感谢
答案 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,例如改造。