Android Fragment:用于Web服务调用的生命周期方法

时间:2014-02-18 11:52:21

标签: android android-fragments

我正在开发一个涉及多个片段的应用程序。 在每个片段中,我必须调用Web服务来获取数据。

目前我从Fragment的 onCreateView()方法调用Web服务。问题无论何时正在进行Web服务调用,如果设备方向已更改,新的Web服务调用都会开始调用。

我认为这可能是因为onCreateView()方法在配置更改时被调用。

我该如何解决这个问题。我应该使用哪种生命周期方法来调用Web服务,以便只调用一次

3 个答案:

答案 0 :(得分:2)

我已通过以下解决方法

解决了这个问题
  1. 为每个Web服务调用方法创建操作标识符。例如。例如,用于登录呼叫的“身份验证”

  2. 创建一个ArrayList对象,称为currentTasks

    ArrayList<String> currentTasks = new ArrayList<String>();
    
  3. 在我调用Web服务的每个方法中,检查ArrayList中是否已存在相应方法的操作标识符。如果没有,则开始操作。

    String operationId = "Authentication";
    if(currentTasks.indexOf(operationId) == -1)
    {
      <do web service call operation here>
       currentTasks.add(operationId);
    }
    
  4. 上述操作的响应正在接收的方法,从ArrayList中删除操作标识符

     if(currentTasks.indexOf("Authentication") != -1){
        currentTasks.remove("Authentication");
     }
    
  5. 这将确保调用不会转到当前正在进行的Web方法。

    我知道这不是实现它的最好方法,这可能不是最佳实践,但现在这对我有用。

答案 1 :(得分:0)

如果您的网络服务代码因设备方向更改而重新启动,那么您可能正在使用AsyncTask。这是AsyncTasks的常见问题,您有几种方法可以解决它。

一个常见的解决方法是将AsyncTask包装在一个不可见的Fragment周围,并确保在方向更改期间不会破坏并重新创建此片段。查看本教程,了解如何执行此操作:Retaining Objects Across Config Changes

答案 2 :(得分:0)

一个简单的解决方案是使用指向asynctask的静态变量。如果变量不为null,则创建并调用AsyncTask。

此致 Prateek