我正在开发一个涉及几个片段的应用程序 . 在每个片段中,我必须调用Web服务来获取数据 .
目前我从片段的 onCreateView() 方法调用Web服务 . 问题无论何时进行Web服务调用并且如果更改了设备方向,我都会收到新的Web服务调用开始调用 .
我想这可能是因为onCreateView()方法在配置更改时被调用 .
我该怎么解决这个问题 . 我应该使用哪种生命周期方法来调用Web服务,以便只调用一次
我通过以下解决方法解决了这个问题
为每个Web服务调用方法创建操作标识符 . 例如 . 例如,用于登录呼叫的“身份验证”
创建一个ArrayList对象说currentTasks
ArrayList<String> currentTasks = new ArrayList<String>();
String operationId = "Authentication"; if(currentTasks.indexOf(operationId) == -1) { <do web service call operation here> currentTasks.add(operationId); }
if(currentTasks.indexOf("Authentication") != -1){ currentTasks.remove("Authentication"); }
这将确保调用不会转到当前正在进行的Web方法 .
我知道这不是实现它的最好方法,这可能不是最佳实践,但现在这对我有用 .
如果您的Web服务代码因设备方向更改而重新启动,那么您可能正在使用 AsyncTask . 这是AsyncTasks的常见问题,您有几种方法可以解决它 .
AsyncTask
一个常见的解决方法是将AsyncTask包装在一个不可见的 Fragment 周围,并确保在方向更改期间不会破坏并重新创建此片段 . 查看本教程,了解如何执行此操作:Retaining Objects Across Config Changes
Fragment
一个简单的解决方案是使用指向asynctask的静态变量 . 如果变量不为null,则创建并调用AsyncTask .
此致,Prateek
3 回答
我通过以下解决方法解决了这个问题
为每个Web服务调用方法创建操作标识符 . 例如 . 例如,用于登录呼叫的“身份验证”
创建一个ArrayList对象说currentTasks
这将确保调用不会转到当前正在进行的Web方法 .
我知道这不是实现它的最好方法,这可能不是最佳实践,但现在这对我有用 .
如果您的Web服务代码因设备方向更改而重新启动,那么您可能正在使用
AsyncTask
. 这是AsyncTasks的常见问题,您有几种方法可以解决它 .一个常见的解决方法是将AsyncTask包装在一个不可见的
Fragment
周围,并确保在方向更改期间不会破坏并重新创建此片段 . 查看本教程,了解如何执行此操作:Retaining Objects Across Config Changes一个简单的解决方案是使用指向asynctask的静态变量 . 如果变量不为null,则创建并调用AsyncTask .
此致,Prateek