我建立了一个应用程序,我需要处理网络异常在许多地方。我想知道怎么做。
在我的Activity中,我有这样的东西:
onCreate {
...
fetchData(); // Needs Internet
processData();
showData();
}在fetchData()方法中,由于没有连接性或信号不佳,所以可能无法获取它。在本例中,我将显示一个AlertDialog,并告诉用户存在网络问题,当用户单击Ok时,它将再次尝试获取它。
问题是这个线程将运行fetchData(),构建并显示Dialog,但是它将继续运行processData()等等。这个方法fetchData()在我的应用程序中被称为两个不同的位置,所以理想的做法是停止这个线程,直到它再次尝试并加载数据。我在这里能用什么逻辑?
我知道这可能是一个简单的问题,但我坚持住了,我不知道有什么模式可以应用。我应该传播这个错误并在对fetchData()的调用中处理它,还是有一种方法可以在加载数据之前停止这个线程?
编辑: fetchData() 是工作的,它运行一个后台线程来下载数据,然后等待它完成返回响应或null。到目前为止,如果有一个错误,我只是获得null,它记录我的网络错误。我想知道如何处理这件事并保持流畅
发布于 2015-08-07 18:22:09
只需使用以下内容修改代码:
onCreate {
...
AsyncTask task = new AsyncTask()
{
@Override
protected Object doInBackground(Object[] objects)
{
Try{
fetchData();} catch(Exception e) {e.printStackTrace();}
}
}
processData();
showData();
}发布于 2015-08-26 16:33:52
我试图在我的问题中解释,我需要的是一个逻辑来处理我的应用程序的流程。我不是在问如何抓住一个例外。
最后,我所做的基本上是一个链式,其中一个方法调用下一个方法:
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();
}基本上,当出现错误时,我使用递归来调用方法本身。当任务成功时,需要执行此方法的后续方法将从该方法中调用。
希望这能帮上忙。
https://stackoverflow.com/questions/31883716
复制相似问题