组合GET和POST请求HttpURLConnection

时间:2015-12-29 21:13:10

标签: android android-asynctask httpurlconnection

我正在寻找关于以下内容的建议,我有一个 HttpUtil类(util),其中我有sendGetRequest-和sendPostRequest方法。 我使用它们来执行成功登录我将要获取某些数据的网站。 现在,我在Asynctask中的 MainActivity 中调用这些方法:

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();
        }
        }

我正在寻找一个解决方案,以便一个等待来完成另一个(第一个获取然后发布,最后获得),如果有可能我想保持这个util.class完整而不是把所有东西放在Asynctask(doInBackground)中。 这是可能的还是我做错了?

您的意见和建议。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

我通常使用的方法是:

  • 首先,考虑使用一个事件,例如像this这样的库,它不仅可以解耦您的代码,还可以在第一个HttpGet请求完成时轻松通知您的活动。
  • 接下来,在 doInBackground 中启动您的GET请求,然后在流程完成后通知您的活动 - 通常在 onPostExecute
  • 在您的活动中,假设您使用EventBus库,您可以执行下一个AsyncTask,它将执行您的下一个任务,例如相应地执行POST请求。

使用这种方法应该可以让您的生活更轻松 - 特别是帮助您了解某些事情何时完成,以便您可以根据需要继续执行下一项任务。

祝你好运!

答案 1 :(得分:0)

您可以拥有两个AsyncTasks。一个用于获取,另一个用于发布。首先执行get请求。然后在第一个AsyncTask的onPostExecute中执行第二个在doInBackground()中发送post请求的AsyncTask;

答案 2 :(得分:0)

您的HttpUtil类应以某种方式表示已收到响应。 例如,将此代码放在HttpUtil中以表示操作结束:

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

并且此代码将等待操作结束:

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

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