0

在我的应用程序中,单击登录页面中的登录后,我必须调用 3 个 API。我有 3 个 AsyncTask 来完成这个要求。我正在做的是在第一个任务 onPostExcecute() 中调用第二个任务,第三个任务在第二个任务的 onPostExecute() 中调用。

任务A 看起来像:

private class TaskA extends AsyncTask<Void, Void, ListA> {

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected ListA doInBackground(Void... params) {
        ListA listA;//its an arraylist          

        listA = //calling my API

        if(listA != null) {
            //writing listA as serialized into sdcard.
        }

        return listA;
    }

    @Override
    protected void onPostExecute(ListA listA) {
        for(ListAValues value : listA) {
            new TaskB().execute(value);             
        }
    }
}

任务B:

private class TaskB extends AsyncTask<ListA, Void, ListB> {

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected ListB doInBackground(ListA... params) {
        ListB listB;//its an arraylist          

        listB = //calling my API

        if(listB != null) {
            //writing listB as serialized into sdcard.
        }

        return listB;
    }

    @Override
    protected void onPostExecute(ListB listB) {
        new TaskC().execute(listB);
    }
}

任务C:

private class TaskC extends AsyncTask<ListB, Void, ListC> {

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected ListC doInBackground(ListB... params) {
        ListC listC;//its an arraylist          

        listC = //calling my API

        if(listC != null) {
            //writing listC as serialized into sdcard.
        }

        return listC;
    }

    @Override
    protected void onPostExecute(ListC listC) {
        //moving to my landing page.
    }
}

问题出在登录页面中,屏幕以黑白颜色闪烁。(白色是我的登录页面活动的背景颜色)。我实施的方式是否正确?还是我需要更改代码?请帮帮我。

4

2 回答 2

2

您不需要使用 3 个单独AsyncTask的 s。AsyncTask您可以按如下方式使用单个:

private class TaskA extends AsyncTask<Void, Void, Void> {

    @Override
    protected void doInBackground(Void... params) {
        ListA listA;//its an arraylist          

        listA = //calling my API

        if(listA != null) {
            //writing listA as serialized into sdcard.
        }

        for(ListAValues value : listA) {
            ListB listB;//its an arraylist          

            listB = //calling my API

            if(listB != null) {
                //writing listB as serialized into sdcard.
            }
            ListC listC;//its an arraylist          

            listC = //calling my API

            if(listC != null) {
                //writing listC as serialized into sdcard.
            }


        }
        return null;
    }

}
于 2012-06-20T13:30:55.227 回答
0

Rajesh,你的代码帮不了我。

我的应用程序是 API 级别 11。所以我使用了

Task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR)

这帮助了我,我的代码运行良好。

于 2012-06-22T06:35:04.130 回答