错误: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空指针异常。

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

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

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误出现在执行异步任务(AsyncTask)的“doinbackground()”方法中。具体错误信息需要查看日志文件或者调试代码才能确定。一些常见的原因包括:网络连接问题、权限不足、内存泄漏等。解决方法可能包括调整代码、增加权限等操作。 ### 回答2: java.lang.RuntimeExceptionJava语言中的一种异常类型,表示在程序运行过程中出现了无法处理的错误。在Android开发中,经常会遇到java.lang.RuntimeException: An error occurred while executing doInBackground()这个异常。这种异常通常出现在使用AsyncTask进行后台操作时。 AsyncTask是Android中的一个非常重要的类,可以在后台线程处理一些耗时的操作,避免在主线程中处理这些操作导致程序假死等问题。在使用AsyncTask进行数据处理时,经常会出现java.lang.RuntimeException异常。 造成java.lang.RuntimeException: An error occurred while executing doInBackground()异常的原因可能有几种: 1.网络连接不稳定或网络出现问题,导致获取网络数据失败。 2.耗时操作出现了意外错误,导致数据不能被正常获取和处理。 3.程序出现了其他异常或错误,导致AsyncTask无法正常执行。 针对出现这种异常的情况,可以采取以下的解决方法: 1.检查网络连接是否正常,如果网络有问题,则需要修改网络设置或重新连接网络。 2.检查程序代码逻辑是否正确,譬如数据源是否正常,数据格式是否正确等等。 3.检查程序代码中是否有其他异常或错误,比如说空指针,数组越界等等,如果有错误需要尽早修正。 4. 如果出现问题无法解决,可以咨询相关技术人员寻求帮助,在出现异常的地方添加日志输出工具以便查找出现问题的位置。 在开发过程中出现异常是一件比较常见的事情,这不但需要开发人员有足够的经验处理这种问题,也需要好好保持心态面对异常,认真分析问题,寻找解决办法。 ### 回答3: 该错误是 Android 应用程序中常见的错误之一,通常与 AsyncTask 类相关。这个错误意味着应用程序在执行 AsyncTask 类的 doInBackground() 方法时发生了错误。 AsyncTask 类是一种用于在 Android 应用程序中执行后台任务的机制。在执行 AsyncTask 类的 doInBackground() 方法时,这个错误往往发生在以下几种情况下: 1.网络连接错误:如果在执行 AsyncTask 类的 doInBackground() 方法时发生网络连接错误,则会触发该错误。这通常是因为应用程序无法连接到服务器,或者服务器返回了错误的响应。 2.空指针异常:如果 AsyncTask 类中的 doInBackground() 方法中使用了 null 对象,就会抛出空指针异常。 3.内存不足:如果 AsyncTask 类的 doInBackground() 方法占用了过多的内存,就会导致内存不足,从而触发该错误。 4.其他错误:可能还有其他可能导致 AsyncTask 类的 doInBackground() 方法出错的因素,如数据类型转换错误等。 为了解决这个错误,你可以尝试以下这些解决方案: 1.检查网络连接:如果该错误是由网络连接问题引起的,则需要检查网络连接是否正常。你可以尝试重新启动网络连接,或者检查服务器是否可用。 2.避免使用 null 对象:如果错误是由空指针异常引起的,则需要避免在 AsyncTask 类的 doInBackground() 方法中使用 null 对象。尽可能使用非空对象和正确的变量类型,避免使用不必要的变量。 3.减少内存消耗:如果错误是由内存不足引起的,则需要减少 AsyncTask 类在执行 doInBackground() 方法时占用的内存。你可以尝试优化代码逻辑,释放不必要的资源。 4.其他解决方案:若问题仍未得到解决,则需要进行更详细的错误分析,并找到问题的根本原因。另外,正确地使用异常处理可以帮助您更快地解决错误,并加快应用程序的修复过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值