从AsyncTask onPostExecute()调用不同的回调

时间:2014-02-20 12:13:10

标签: android android-asynctask

我已经为我的类实现了一个内部AsyncTask,它从服务器执行初始设置数据查询并存储到设备缓存中。设置数据分为2个JSON文件。读取/缓存第一个JSON,如果启用了某些条件,则将下载第二个JSON文件并将其存储到缓存中。我想从两个操作中使用相同的AsyncTask。

在doInBackground()中,我执行独立于JSON类型的JSON下载操作。但是在onPostExecute()中我想调用不同的回调,具体取决于它的第一个JSON文件还是第二个,因为它们需要不同的处理。这可能吗?

编辑:请注意我不想使用布尔值,枚举来决定调用哪个回调,因为将来我会有更多文件要处理。从我的调用类我想设置回调,其余应该自动发生。

3 个答案:

答案 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方法,所以有两种方法:

  1. 扩展AsychTask和imlement setOnPostExcuteListner
  2. 或者只是从onPostExcute简单地调用“你的方法”!