Множественный цикл обработки Android - PullRequest
0 голосов
/ 21 сентября 2011

Я пытаюсь разработать программу, которая выполняет несколько вызовов API на веб-сайте (каждое «имя» имеет несколько режимов, через которые я должен пройти цикл, прежде чем перейти к следующему имени).Проблема в том, что вы ограничены вызовом API раз в секунду.Я думал, что обработчик был способ пойти, но теперь я так не думаю.

Он проходит через цикл просто отлично, но я так не думаю.Я получаю следующую ошибку:

РЕДАКТИРОВАТЬ: выяснил, что это было вызвано

09-21 22:33:46.760: ERROR/AndroidRuntime(9683): FATAL EXCEPTION: AsyncTask #1
09-21 22:33:46.760: ERROR/AndroidRuntime(9683): java.lang.RuntimeException: An error occured while executing doInBackground()
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at android.os.AsyncTask$3.done(AsyncTask.java:266)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.lang.Thread.run(Thread.java:1020)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683): Caused by: android.content.res.Resources$NotFoundException: String array resource ID #0x7f050002
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at android.content.res.Resources.getStringArray(Resources.java:459)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at com.companionfree.flurryanalytics.APICallData.doInBackground(APICallData.java:66)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at com.companionfree.flurryanalytics.APICallData.doInBackground(APICallData.java:1)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at android.os.AsyncTask$2.call(AsyncTask.java:252)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-21 22:33:46.760: ERROR/AndroidRuntime(9683):     ... 4 more

Когда я делаю этот вызов в моей асинхронной задаче:

String [] metrics = r.getStringArray (R.array.metric_apicall);

Я не думаю, что мой код предназначен для того, что я пытаюсь сделать.Может кто-нибудь сказать мне, если это правильный подход? ... Кроме того, APICallData (MainActivity.this, app, mode) .execute ();является асинхронной задачей.

//Other code above this irrelevant

    mApp = 0;
    mMode = 0;
    callAPI(mMode, names[mApp]);
    mMode++;

    while (mApp < names.length) {
        while (mMode < metrics.length) {
            Handler handler = new Handler(); 
            handler.postDelayed(new Runnable() { 
                public void run() { 
                    callAPI(mMode, names[mApp]);

                }
            }, 1010); 
            mMode++;
        }
        mMode = 0;
        mApp++;
    }

private void callAPI(int mode, String app) {
    new APICallData(MainActivity.this, app, mode).execute();
}

1 Ответ

0 голосов
/ 21 сентября 2011

Я думаю, что вы должны использовать Timer и TimerTask и выполнять его с интервалом в 1 секунду.

...