Java 如何将函数作为参数传递给AsynTask
因为我是android开发中的新手,所以我需要为我的http请求提供一个asynctask类。我在一个活动中有很多http请求函数类型,我想让它成为动态的。所以我只想创建一个AsyncTask函数来运行我所有的函数 这就是一个例子Java 如何将函数作为参数传递给AsynTask,java,android,android-asynctask,Java,Android,Android Asynctask,因为我是android开发中的新手,所以我需要为我的http请求提供一个asynctask类。我在一个活动中有很多http请求函数类型,我想让它成为动态的。所以我只想创建一个AsyncTask函数来运行我所有的函数 这就是一个例子 private class WebServiceCall extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { g
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);
}
}
)
任何帮助和代码示例都将不胜感激,
谢谢在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);
}
}
我不知道你所说的
函数
作为另一个函数的参数是什么意思
但是您可以使用接口
实现此目的
例如:
创建可在onPostExecute()中调用的回调接口
在调用asynckTask之前,请按如下方式定义它:
ResponseCallback callback = new ResponseCallback() {
@Override
public void onRespond() {
//code to be done after calling it from onPostExecute
}
};
并将回调
传递给异步任务的构造函数
,并在onPostExecute中调用它
public interface ResponseCallback {
void onRespond();
}
当然,您可以根据自己的需要修改接口的签名。这并不能直接解决您的问题,但我敦促您调查使用AsyncTask处理任何可能需要几毫秒以上时间的事情时出现的相当明显的问题,还有几个非常好的Android HTTP/REST框架,例如改型。最好添加一个接受回调的构造函数。然后您可以实例化并像调用新的WebServiceCall(function01)一样调用它;可以显示代码示例吗?谷歌为如何实现回调。但我想知道你为什么想要这个。如果asynctask是活动中的私有类,那么您可以调用该活动中定义的每个函数。那么您的用例是什么呢?您能展示代码示例吗?还是简单地修改了我的代码?我想调用DoInbackground,因为这是一个繁重的过程。可能吗?接口中的方法可以在任何地方调用(当然,如果接口变量不是null),但这都与代码逻辑有关!我自己从来不用在doInBackground
中调用回调!
public interface ResponseCallback {
void onRespond();
}
ResponseCallback callback = new ResponseCallback() {
@Override
public void onRespond() {
//code to be done after calling it from onPostExecute
}
};