首页 文章

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

提问于
浏览
5

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

目前我从片段的 onCreateView() 方法调用Web服务 . 问题无论何时进行Web服务调用并且如果更改了设备方向,我都会收到新的Web服务调用开始调用 .

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

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

3 回答

  • 0

    我通过以下解决方法解决了这个问题

    • 为每个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方法 .

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

  • 2

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

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

  • 0

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

    此致,Prateek

相关问题