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