Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.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 无法在doInBackground()中使用侦听器_Android_Android Asynctask_Listener - Fatal编程技术网

Android 无法在doInBackground()中使用侦听器

Android 无法在doInBackground()中使用侦听器,android,android-asynctask,listener,Android,Android Asynctask,Listener,在我的asyncTaskdoInBackground()方法中,我想通过祝酒来处理异常。但我不能这样做,这是我得到的例外。为什么呢? 另外,我可以在onPreExecute()和onPostExecute()中完成 02-04 09:43:45.190: E/AndroidRuntime(19308): FATAL EXCEPTION: AsyncTask #1 02-04 09:43:45.190: E/AndroidRuntime(19308): java.lang.RuntimeExcep

在我的
asyncTask
doInBackground()
方法中,我想通过祝酒来处理异常。但我不能这样做,这是我得到的例外。为什么呢? 另外,我可以在
onPreExecute()
onPostExecute()
中完成

02-04 09:43:45.190: E/AndroidRuntime(19308): FATAL EXCEPTION: AsyncTask #1
02-04 09:43:45.190: E/AndroidRuntime(19308): java.lang.RuntimeException: An error     occured while executing doInBackground()
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.lang.Thread.run(Thread.java:856)
02-04 09:43:45.190: E/AndroidRuntime(19308): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.os.Handler.<init>(Handler.java:121)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.widget.Toast$TN.<init>(Toast.java:317)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.widget.Toast.<init>(Toast.java:91)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.widget.Toast.makeText(Toast.java:233)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at com.xxx.MenuActivity$ImageCount.setView(MenuActivity.java:208)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at com.xxx.StringAsyncRetriever.getData(StringAsyncRetriever.java:101)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at com.xxx.StringAsyncRetriever.getData(StringAsyncRetriever.java:95)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at com.xxx.StringAsyncRetriever.doInBackground(StringAsyncRetriever.java:44)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at com.xxx.StringAsyncRetriever.doInBackground(StringAsyncRetriever.java:1)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-04 09:43:45.190: E/AndroidRuntime(19308):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-04 09:43:45.190:E/AndroidRuntime(19308):致命异常:AsyncTask#1
02-04 09:43:45.190:E/AndroidRuntime(19308):java.lang.RuntimeException:执行doInBackground()时出错
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.os.AsyncTask$3.done(AsyncTask.java:278)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-04 09:43:45.190:E/AndroidRuntime(19308):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-04 09:43:45.190:E/AndroidRuntime(19308):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-04 09:43:45.190:E/AndroidRuntime(19308):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-04 09:43:45.190:E/AndroidRuntime(19308):在java.lang.Thread.run(Thread.java:856)中
02-04 09:43:45.190:E/AndroidRuntime(19308):原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.os.Handler.(Handler.java:121)
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.widget.Toast$TN.(Toast.java:317)
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.widget.Toast(Toast.java:91)
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.widget.Toast.makeText(Toast.java:233)上
02-04 09:43:45.190:E/AndroidRuntime(19308):位于com.xxx.MenuActivity$ImageCount.setView(MenuActivity.java:208)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于com.xxx.StringAsyncRetriever.getData(StringAsyncRetriever.java:101)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于com.xxx.StringAsyncRetriever.getData(StringAsyncRetriever.java:95)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于com.xxx.StringAsyncRetriever.doInBackground(StringAsyncRetriever.java:44)
02-04 09:43:45.190:E/AndroidRuntime(19308):位于com.xxx.StringAsyncRetriever.doInBackground(StringAsyncRetriever.java:1)
02-04 09:43:45.190:E/AndroidRuntime(19308):在android.os.AsyncTask$2.call(AsyncTask.java:264)
02-04 09:43:45.190:E/AndroidRuntime(19308):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

您不能在
doInBackground
中执行ui操作,因此在出现异常的情况下,返回一个可在
onPostExecute
中检查的值。。基于此值,显示您的祝酒词

努努的回答是正确的。但是,如果您想在doInBackground方法中处理异常,并显示一些toast,并在catch子句或方法本身中继续执行一些其他操作,则应该使用onProgressUpdate方法。它也在UI线程上运行,可以在doInBackground中调用任意次数。您需要publishProgress来执行对onProgressUpdate方法的调用

在doInBackground完成后,OnPostExecute只被调用一次

以下是AsynchTask的文档: