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