我已经为我的类实现了一个内部AsyncTask,它从服务器执行初始设置数据查询并存储到设备缓存中。设置数据分为2个JSON文件。读取/缓存第一个JSON,如果启用了某些条件,则将下载第二个JSON文件并将其存储到缓存中。我想从两个操作中使用相同的AsyncTask。
在doInBackground()中,我执行独立于JSON类型的JSON下载操作。但是在onPostExecute()中我想调用不同的回调,具体取决于它的第一个JSON文件还是第二个,因为它们需要不同的处理。这可能吗?
编辑:请注意我不想使用布尔值,枚举来决定调用哪个回调,因为将来我会有更多文件要处理。从我的调用类我想设置回调,其余应该自动发生。
答案 0 :(得分:1)
以下实施应解决您的问题:
private class MyCustomAsyncTask extends AsyncTask<Void, Void, Void>{
private boolean mShouldCallMethod1;
public MyCustomAsyncTask(boolean shouldCallMethod1){
mShouldCallMethod1 = shouldCallMethod1;
}
@Override
protected Void doInBackground(Void... params) {
//code goes here..
return null;
}
@Override
protected void onPostExecute(Void result) {
if(mShouldCallMethod1){
method1();
}else{
method2();
}
}
}
即将自定义AsyncTask
作为内部类。
答案 1 :(得分:0)
如果使用包含两个回调的相同接口,则没有问题。只需使用2个回调方法(json1,json2)声明一个接口,并将接口的实例传递给AsyncTask。 在你的onPostExecute()中,你可以调用回调。
答案 2 :(得分:0)
由于android不支持onPostExccute的setListner方法,所以有两种方法: