Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多处理器循环_Android_Loops_Handler - Fatal编程技术网

Android 多处理器循环

Android 多处理器循环,android,loops,handler,Android,Loops,Handler,我正在尝试设计一个程序,在一个网站上进行多个API调用(每个“名称”都有几个模式,在我转到下一个名称之前,我必须循环使用这些模式)。问题是,您只能每秒调用一次API。我原以为训练员是最好的选择,但现在我不这么认为了 它在循环中运行得很好,但我不这么认为。我得到以下错误: 编辑:发现这是由 09-21 22:33:46.760: ERROR/AndroidRuntime(9683): FATAL EXCEPTION: AsyncTask #1 09-21 22:33:46.760: ERROR/A

我正在尝试设计一个程序,在一个网站上进行多个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\u 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();
}
//上面的其他代码与此无关
mApp=0;
mMode=0;
callAPI(mMode,名称[mApp]);
mMode++;
while(mApp
我认为你应该使用定时器和定时器任务,每隔1秒执行一次。

这不会冻结整个过程吗?我需要它是一个背景更新…直接从java文档。。。。。计时器是线程调度任务的工具,以便将来在后台线程中执行。任务可以安排为一次性执行,也可以定期重复执行。与每个计时器对象对应的是一个后台线程,用于执行计时器的所有任务。希望这有助于消除你的疑虑