首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理引发网络异常时的流

如何处理引发网络异常时的流
EN

Stack Overflow用户
提问于 2015-08-07 17:43:50
回答 2查看 83关注 0票数 0

我建立了一个应用程序,我需要处理网络异常在许多地方。我想知道怎么做。

在我的Activity中,我有这样的东西:

代码语言:javascript
复制
onCreate {
   ...
   fetchData(); // Needs Internet
   processData();
   showData();
}

fetchData()方法中,由于没有连接性或信号不佳,所以可能无法获取它。在本例中,我将显示一个AlertDialog,并告诉用户存在网络问题,当用户单击Ok时,它将再次尝试获取它。

问题是这个线程将运行fetchData(),构建并显示Dialog,但是它将继续运行processData()等等。这个方法fetchData()在我的应用程序中被称为两个不同的位置,所以理想的做法是停止这个线程,直到它再次尝试并加载数据。我在这里能用什么逻辑?

我知道这可能是一个简单的问题,但我坚持住了,我不知道有什么模式可以应用。我应该传播这个错误并在对fetchData()的调用中处理它,还是有一种方法可以在加载数据之前停止这个线程?

编辑: fetchData() 工作的,它运行一个后台线程来下载数据,然后等待它完成返回响应或null。到目前为止,如果有一个错误,我只是获得null,它记录我的网络错误。我想知道如何处理这件事并保持流畅

EN

回答 2

Stack Overflow用户

发布于 2015-08-07 18:22:09

只需使用以下内容修改代码:

代码语言:javascript
复制
onCreate {
   ...
    AsyncTask task = new AsyncTask()
     {
             @Override
            protected Object doInBackground(Object[] objects)
            {
                 Try{
                     fetchData();} catch(Exception e) {e.printStackTrace();}
            }
     }
             processData();
            showData();
    }
票数 0
EN

Stack Overflow用户

发布于 2015-08-26 16:33:52

我试图在我的问题中解释,我需要的是一个逻辑来处理我的应用程序的流程。我不是在问如何抓住一个例外。

最后,我所做的基本上是一个链式,其中一个方法调用下一个方法:

代码语言:javascript
复制
onCreate {
    ...
    fetchData(); // Needs Internet
}

fetchData() {
    if (data was fetched) {
        processFetchedData();
    }
    else { // Problem fetching data
        // Alerts user with AlertDialog and ask him to try again, then call fetchData() itself
    }
}

processFetchedData() {
    processData();
    showData();
}

基本上,当出现错误时,我使用递归来调用方法本身。当任务成功时,需要执行此方法的后续方法将从该方法中调用。

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31883716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档