Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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 - Fatal编程技术网

Android 异步任务的访问方法

Android 异步任务的访问方法,android,Android,我的应用程序中的问题是处理程序不工作,它抛出以下错误: 04-11 10:00:22.090: E/AndroidRuntime(2928): FATAL EXCEPTION: AsyncTask #1 04-11 10:00:22.090: E/AndroidRuntime(2928): Process: com.wunderlist.slidinglayersample, PID: 2928 04-11 10:00:22.090: E/AndroidRuntime(2928): java.l

我的应用程序中的问题是处理程序不工作,它抛出以下错误:

04-11 10:00:22.090: E/AndroidRuntime(2928): FATAL EXCEPTION: AsyncTask #1
04-11 10:00:22.090: E/AndroidRuntime(2928): Process: com.wunderlist.slidinglayersample, PID: 2928
04-11 10:00:22.090: E/AndroidRuntime(2928): java.lang.RuntimeException: An error occured while executing doInBackground()
04-11 10:00:22.090: E/AndroidRuntime(2928):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.lang.Thread.run(Thread.java:818)
04-11 10:00:22.090: E/AndroidRuntime(2928): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-11 10:00:22.090: E/AndroidRuntime(2928):     at android.os.Handler.<init>(Handler.java:200)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at android.os.Handler.<init>(Handler.java:114)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at com.wunderlist.slidinglayersample.AddEvent$DownloadFilesTask$GeocoderHandler.<init>(AddEvent.java:152)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at com.wunderlist.slidinglayersample.AddEvent$DownloadFilesTask$GeocoderHandler.<init>(AddEvent.java:152)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at com.wunderlist.slidinglayersample.AddEvent$DownloadFilesTask.viedotGeoCoo(AddEvent.java:139)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at com.wunderlist.slidinglayersample.AddEvent$DownloadFilesTask.doInBackground(AddEvent.java:105)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at com.wunderlist.slidinglayersample.AddEvent$DownloadFilesTask.doInBackground(AddEvent.java:102)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-11 10:00:22.090: E/AndroidRuntime(2928):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)

我不知道发生了什么,因为我的应用程序无法正常运行
doInBackground
方法。你有什么办法解决我的问题吗

您正试图在工作线程(任务的doInBackground())内创建一个处理程序(GeocoderHandler)。但默认情况下,没有与工作线程关联的活套。因此,你得到了一个例外

解决这个问题的一个方法是在工作线程内创建一个循环器,然后创建处理程序

使用looper.prepare和looper.loop方法在队列中创建一个looper和loop。尝试将这些放在doInBackground方法中,异常应该会消失

protected Void doInBackground(Void... urls) {
        Looper.prepare();
        viedotGeoCoo();
        Looper.loop();
        return null;
    }
您必须在postExecute中调用“viedotGeoCoo();”此方法。因为在异步任务中,UI更新过程仅在postExecute中进行

更改代码如下::

private class DownloadFilesTask extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... urls) {


            return null;
        }

        protected void onProgressUpdate(Void... progress) {

        }

        protected void onPostExecute(Void result) {
            viedotGeoCoo();
            Intent intent = new Intent(AddEvent.this, MainActivity.class);
            startActivity(intent);
        }
私有类下载文件任务扩展异步任务{
受保护的Void doInBackground(Void…URL){
返回null;
}
受保护的void onProgressUpdate(void…progress){
}
受保护的void onPostExecute(void结果){
viedotGeoCoo();
意向意向=新意向(AddEvent.this,MainActivity.class);
星触觉(意向);
}

让您调用Asyank Task中的任何Toast消息否尚未这样做为什么您使用此StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);还发布Asyank taskWell,这会破坏AsyncTask的整个用途,因为我需要veidotGeoCoo()先开始,然后我将启动OnPostExecute中的最后一个方法我添加了您所说的内容,它将我抛出到私有的void run()中它需要一个表达式,这是什么意思?@Girts我很抱歉把你搞糊涂了,请检查编辑后的答案,然后再试一次。让我知道它是否有效。好吧,它成功了,但现在我无法进入onPostExecute。你知道为什么吗?它有效,但它似乎只是在后台工作。好吧,我删除了这个行循环器。循环()它成功了谢谢你
private class DownloadFilesTask extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... urls) {


            return null;
        }

        protected void onProgressUpdate(Void... progress) {

        }

        protected void onPostExecute(Void result) {
            viedotGeoCoo();
            Intent intent = new Intent(AddEvent.this, MainActivity.class);
            startActivity(intent);
        }