Java ProgressDialog在onPreExecute中崩溃

Java ProgressDialog在onPreExecute中崩溃,java,android,Java,Android,我在一个线程的onPreExecute中遇到一个崩溃“无法在未调用Looper.prepare()的线程内创建处理程序”。据我所知,onPreExecute是在UI线程上运行的,所以它怎么会崩溃呢 public void onPreExecute() { if (loading == null || !loading.isShowing()) loading = ProgressDialog.show(co, "",

我在一个线程的onPreExecute中遇到一个崩溃“无法在未调用Looper.prepare()的线程内创建处理程序”。据我所知,onPreExecute是在UI线程上运行的,所以它怎么会崩溃呢

public void onPreExecute() {
        if (loading == null || !loading.isShowing())
            loading = ProgressDialog.show(co, "",
                    "Retrieving Geolocation...", true);
    }

非常奇怪的是,它有时有效,有时无效。从您的问题来看,似乎您正在线程中使用
onPreExecute()

onPreExecute()
是android提供的
AsyncTask
类中的一个方法。如果覆盖它,那么它将确保代码在UI线程上运行,而不仅仅是
onPreExecute()
代码中的任何地方! 一个好主意是在重写方法时始终使用
@Override
符号,这样IDE将通知您是否存在任何使用给定签名进行重写的方法

(下面几段)说明:

  • 必须在UI线程上创建任务实例
  • 必须在UI线程上调用execute(参数…)
  • 不要手动调用onPreExecute()、onPostExecute(结果)、doInBackground(参数…)和onProgressUpdate(进度…)
  • 该任务只能执行一次(如果尝试第二次执行,将引发异常)

我猜您在后台线程上调用了
execute()

我没有从我的代码开始执行。当我执行线程时,Android会正确启动它,我可能会执行两次。我会检查的。