错误:: An error occured while executing doInBackground;

时间:2025-04-21 11:10:47

它是android系统提供的异步处理类,用于常用的异步交互处理。

**实例化AsyncTask

new AsyncTask<Params,Progress,Result>//参数1:启动任务执行的参数;参数2:后台任务执行的进度百分比;参数3:后台执行任务最终返回的结果

为了实例化一个异步任务,分4步,使用4个方法:

(1)onPreExecute()

(2)doInBackground(Params...);

(3)onProgressUpdate(Progress);

(4)onPostExecute(resulr);

实例:

  new AsyncTask<Integer, Integer, String>() {

     // UI显示
     protected void onPreExecute() {
      dialog = (, "呜呜",
        "正在导出短信,请稍候....");
      ();
     }

     // 后台执行
     protected String doInBackground(Integer... params) {
      String input_number = ().toString();
      String result = "";
      // 导出所有短信
      if (input_number.equals("")) {
       List<String> listnumber = getAllNumber();
       for (String number : listnumber) {
        if (file_Write("", get_sms(number))) {
         result += "号码" + number
           + "的所有短信已经导出到文件中\n";
        } else {
         result += "号码" + number + "的所有短信导出到文件失败\n";
        }
       }

      }// 导出指定号码短信
      else {
       if (file_Write(input_number + ".txt",
         get_sms(input_number))) {
        result = "号码" + input_number + "的所有短信已经导出到文件"
          + input_number + ".txt中";
       } else {
        result = "号码" + input_number + "的所有短信导出到文件失败";
       }
      }
      return result;
     }

     // 搜索完毕后,结果处理
     protected void onPostExecute(String result) {
      ();
      new ()
        .setMessage(result).create().show();

      (result);
     }
    }.execute(0);

  

无奈的是调试出来,doInBackground()这一步有错!

12-10 09:46:45.000: E/AndroidRuntime(802): FATAL EXCEPTION: AsyncTask #1
12-10 09:46:45.000: E/AndroidRuntime(802): : An error occured while executing doInBackground()
12-10 09:46:45.000: E/AndroidRuntime(802):  at $(:200)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $(:274)
12-10 09:46:45.000: E/AndroidRuntime(802):  at (:125)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $(:308)
12-10 09:46:45.000: E/AndroidRuntime(802):  at (:138)
12-10 09:46:45.000: E/AndroidRuntime(802):  at (:1088)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $(:581)
12-10 09:46:45.000: E/AndroidRuntime(802):  at (:1019)
12-10 09:46:45.000: E/AndroidRuntime(802): Caused by:
12-10 09:46:45.000: E/AndroidRuntime(802):  at (:184)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $1(:161)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $1$(:60)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $1$(:1)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $(:185)
12-10 09:46:45.000: E/AndroidRuntime(802):  at $(:306)
12-10 09:46:45.000: E/AndroidRuntime(802):  ... 4 more

网上解答:

窗体泄露错误

在谷歌后发现。窗体泄露的原因是有些dialog或则processDialog等引起的。这些空间依附的Activity已经关闭而这些控件还在运行中。所以导致bug

典型的场合是activity 和dialog同时显示 要先() 后() 如果直接finish() 会出错 但不影响功能

我的错误原因:

错误的主要原因在于AsyncTask的方法doInBackground()中调用的函数有错:有空指针异常的错误。

我的错误原因在Cursor空指针异常。

我在getAllNumber()方法中,用ConentResolver查询,得到的数据传给Cursor,查询条件  String[] projection = new String[] { "_id", "address", "person", "date" };
  Uri uri = (SMS_URI_ALL);错把date写成data了,导致Cursor空指针异常。

改了这个错之后,程序就没问题了。

真的是马虎不得,一个字母的错误,整整闹腾了两个晚上。