0

私のアプリケーションでは、ログインページで[ログイン]をクリックすると、3つのAPIを呼び出す必要があります。この要件を実行するための3つのAsyncTaskがあります。私が行っているのは、1番目のタスクonPostExcecute()内で2番目のタスクを呼び出し、3番目のタスクを2番目のタスクのonPostExecute()内で呼び出すことです。

TaskAは次のようになります。

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);             
        }
    }
}

TaskB:

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);
    }
}

TaskC:

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つの別々のを使用する必要はありませんAsyncTaskAsyncTask次のようにシングルを使用できます。

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 に答える