Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android asynctask在没有internet连接的情况下关闭时应用程序崩溃_Android_Android Asynctask - Fatal编程技术网

Android asynctask在没有internet连接的情况下关闭时应用程序崩溃

Android asynctask在没有internet连接的情况下关闭时应用程序崩溃,android,android-asynctask,Android,Android Asynctask,我正在尝试下面的代码,当网络连接时,一切正常 这是工作流程 有一个主活动,单击此按钮时,此活动将从中打开 它将执行分析部分,然后转到下一个列表活动。如果出现反按或此活动已关闭,则asynctask应停止使用 loader.cancel(true); 如果网络可用并经过测试,这将非常有效。问题发生在没有互联网连接的情况下 此时将显示警报框,它将转到第一个活动,然后崩溃 我希望警报框显示和应用程序不应该崩溃,并返回到第一->主活动 我已经做过裁判了 我猜它会因为NullPointerExcept

我正在尝试下面的代码,当网络连接时,一切正常

这是工作流程

有一个主活动,单击此按钮时,此活动将从中打开 它将执行分析部分,然后转到下一个列表活动。如果出现反按或此活动已关闭,则asynctask应停止使用

loader.cancel(true);
如果网络可用并经过测试,这将非常有效。问题发生在没有互联网连接的情况下

此时将显示警报框,它将转到第一个活动,然后崩溃

我希望警报框显示和应用程序不应该崩溃,并返回到第一->主活动

我已经做过裁判了


我猜它会因为NullPointerException而崩溃

这是因为如果没有网络连接,就不会创建AsyncLoadXMLFeed实例。 所以当onDestroy发生时,您调用loader.canceltrue;它抛出了这个异常。

终于这样做了 感谢anatol需要检查装载机!=空的


处理此问题的最佳和最简单的解决方案是在onPost异步执行任务中使用try-catch块。像这样

        @Override
        protected void onPostExecute(String s) {
            try {
                super.onPostExecute(s);
                loading.dismiss();
            }catch (Exception ex){
                Toast.makeText(UserLogin.this, "Something is going wrong, please try again!", Toast.LENGTH_LONG).show();
            }
        }

这将防止你的应用程序崩溃。

发布崩溃日志并询问问题你是否设置了访问权限\u网络\u状态?是的,网络连接一切正常
@Override
       public void onDestroy(){
          super.onDestroy();

          // Cancel the task
          if(loader != null && loader.getStatus() != AsyncTask.Status.FINISHED) {
              loader.cancel(true);
          }

          //loader.cancel(true);
       } 
        @Override
        protected void onPostExecute(String s) {
            try {
                super.onPostExecute(s);
                loading.dismiss();
            }catch (Exception ex){
                Toast.makeText(UserLogin.this, "Something is going wrong, please try again!", Toast.LENGTH_LONG).show();
            }
        }