运行AsyncTask时looper错误?
问题描述:
05-18 17:53:35.318: WARN/System.err(474): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-18 17:53:35.349: WARN/System.err(474): at android.os.Handler.<init>(Handler.java:121)
05-18 17:53:35.349: WARN/System.err(474): at android.app.Dialog.<init>(Dialog.java:101)
05-18 17:53:35.358: WARN/System.err(474): at android.app.AlertDialog.<init>(AlertDialog.java:63)
05-18 17:53:35.358: WARN/System.err(474): at android.app.ProgressDialog.<init>(ProgressDialog.java:80)
05-18 17:53:35.377: WARN/System.err(474): at android.app.ProgressDialog.<init>(ProgressDialog.java:76)
05-18 17:53:35.377: WARN/System.err(474): at com.Utils.SProgress.StartProgress(SProgress.java:42)
05-18 17:53:35.387: WARN/System.err(474): at com.FindMe.DisplayAtms$Asyctast.onPreExecute(DisplayAtms.java:880)
05-18 17:53:35.400: WARN/System.err(474): at android.os.AsyncTask.execute(AsyncTask.java:391)
05-18 17:53:35.400: WARN/System.err(474): at com.FindMe.DisplayAtms.LoadFunction(DisplayAtms.java:141)
05-18 17:53:35.408: WARN/System.err(474): at com.FindMe.MyApplication$AsyncATMS.doInBackground(MyApplication.java:207)
05-18 17:53:35.419: WARN/System.err(474): at com.FindMe.MyApplication$AsyncATMS.doInBackground(MyApplication.java:1)
05-18 17:53:35.419: WARN/System.err(474): at android.os.AsyncTask$2.call(AsyncTask.java:185)
05-18 17:53:35.427: WARN/System.err(474): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-18 17:53:35.438: WARN/System.err(474): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-18 17:53:35.438: WARN/System.err(474): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
05-18 17:53:35.447: WARN/System.err(474): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
05-18 17:53:35.458: WARN/System.err(474): at java.lang.Thread.run(Thread.java:1096)
Another function()
{
anotherSingletonprogressdiloag.hide();
.new Asyctast().execute();
}
public class Asyctast extends AsyncTask<Void, Object, Void>
{
private ProgressDialog dialog = new ProgressDialog(DisplayAtms.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.show();
}
@Override
protected void onProgressUpdate(final Object... args) {
super.onProgressUpdate(args);
if ((Boolean) args[0]) {
Toast.makeText(DisplayAtms.this, args[1].toString(),
Toast.LENGTH_LONG).show();
}
}
@Override
protected Void doInBackground(Void... arg0) {
Log.d("Asynctask", ""+arg0);
publishProgress(true,"sd sdfsdf");
return null;
}
}
我开始放在signleton类另一个对话框后,这个任务被停止线程,然后我试图启动另一个进程中的AsyncTask 对话框,本次对话onPreexecute提高尺蠖错误任何一个人指导我如何摆脱这个问题?
答
private final Runnable Example= new Runnable()
{
public void run()
{
try
{
//put ur code which cause the looper error
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
private final Handler mHandler = new Handler();**
,并呼吁乌尔异步任务内的下列
mHandler.post(Example);
希望你明白。
答
您不能在asynctask运行时修改UI - 只能在执行前或执行后执行。
如果您需要更新ui组件,您可以在主类中使用处理程序并将更新发送到该处理程序。
+0
可以请你在这里指导我如何将它移动到那个处理器类的东西? – UMAR 2011-05-18 12:15:14
答
正如对方已经说过。您不能直接编辑AsyncTask的doInBackground()方法的UI。但是您可以使用onProgressUpdate(Progress...)和publishProgress(Progress...)来更新UI。因此,您可以坚持使用AsyncTask概念,而无需明确使用处理程序。
是的,我得到它我在毛孔上使用runonuiThread(exampleRunable)执行并将该代码移动到可替代的那个runnable。谢谢 – UMAR 2011-05-18 13:01:20
不要给我投票答案。 – Kakey 2011-05-19 05:26:46