错误:java.lang.RuntimeException: An error occured while executing doInBackground();

它是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 = ProgressDialog.show(MainActivity.this, "呜呜",
        "正在导出短信,请稍候....");
      super.onPreExecute();
     }

     // 后台执行
     protected String doInBackground(Integer... params) {
      String input_number = edit1.getText().toString();
      String result = "";
      // 导出所有短信
      if (input_number.equals("")) {
       List<String> listnumber = getAllNumber();
       for (String number : listnumber) {
        if (file_Write("AllNumber.txt", get_sms(number))) {
         result += "号码" + number
           + "的所有短信已经导出到文件AllNumber.txt中\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) {
      dialog.dismiss();
      new AlertDialog.Builder(MainActivity.this)
        .setMessage(result).create().show();

      super.onPostExecute(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): java.lang.RuntimeException: An error occured while executing doInBackground()
12-10 09:46:45.000: E/AndroidRuntime(802):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.lang.Thread.run(Thread.java:1019)
12-10 09:46:45.000: E/AndroidRuntime(802): Caused by: java.lang.NullPointerException
12-10 09:46:45.000: E/AndroidRuntime(802):  at com.example.getmsg.MainActivity.getAllNumber(MainActivity.java:184)
12-10 09:46:45.000: E/AndroidRuntime(802):  at com.example.getmsg.MainActivity.access$1(MainActivity.java:161)
12-10 09:46:45.000: E/AndroidRuntime(802):  at com.example.getmsg.MainActivity$1$1.doInBackground(MainActivity.java:60)
12-10 09:46:45.000: E/AndroidRuntime(802):  at com.example.getmsg.MainActivity$1$1.doInBackground(MainActivity.java:1)
12-10 09:46:45.000: E/AndroidRuntime(802):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-10 09:46:45.000: E/AndroidRuntime(802):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
12-10 09:46:45.000: E/AndroidRuntime(802):  ... 4 more

网上解答:

窗体泄露错误

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

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

我的错误原因:

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

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

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

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

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

 

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页