2015-12-29 145 views
0

我要找大概有以下一些提醒,我有一个HttpUtil类(使用率),其中我有我的sendGetRequest-和sendPostRequest方法。 我使用它们执行成功登录到我要从中获取一些数据的网站。 现在,我把我的MainActivity这些方法中的AsyncTask:结合GET和POST请求HttpURLConnection的

protected Boolean doInBackground(Void... params) { 
    try { 
      //1. GET request 
       util.sendGetRequest(loginURL, null); 
      //2. Post request 
       util.sendPostRequest(loginURL, null); 
      //3. Final GET request 
       util.sendGetRequest(resultURL, null); 
      // Read stream 
       String[] response = util.readMultipleLinesRespone(); 
        for (String line : response) { 
       System.out.println(line); 
       } 
     } catch (InterruptedException e) { 
      return false; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 

我要寻找一个解决方案,使一个等待另一个到结束(1得到再后,终于得到),如果可能的话,我想保持这个util.class完好无损,并且不把所有东西放在Asynctask(doInBackground)中。 这是可能的还是我有错误的方法?

您的意见和建议请。

预先感谢您。

回答

1

的方法,我通常使用的是这样的:

  • 首先,考虑例如使用一个事件像this库,不仅解耦你的代码,而且做起来很简单,通知您的活动,当第一HttpGet请求完成。
  • 接下来,开始您的GET请求,里面doInBackground,然后一旦这个过程完成后通知您的活动 - 通常里面onPostExecute
  • 当您的活动,假设你使用EventBus库,可以执行下一次的AsyncTask这将完成您的下一个任务,如相应地执行POST请求。

使用这种方法应该让您的生活更加轻松 - 特别有助于您了解什么时候完成,因此您可以根据需要继续下一项任务。

祝你好运!

+0

THX Eenvincible,“事件”是关键字的确,不错的图书馆Thx的信息。 – Simon

+0

我很高兴你发现它有帮助西蒙! – Eenvincible

+0

你可以通过显示一个进度对话框,每当一个操作正在进行像onPreExecute()内部并关闭它onPostExecute - 帮助用户知道发生了什么,应该等待 – Eenvincible

0

您可以有两个AsyncTasks。一个用于获取和其他邮件。首先执行获取请求。然后在第一个AsyncTask的onPostExecute中执行第二个在doInBackground()中发送post请求的AsyncTask;

0

你的HttpUtil类应该以某种方式表示接收到响应。 例如,把这个代码HttpUtil信号操作的结束:

synchronized (this) { 
    done = true; 
    notifyAll(); 
} 

这个代码将等待操作结束:

while(!util.isDone()) { 
    try { 
    synchronized(util) { util.wait(); } 

    } catch(Exception e) { ... } 
}