组合 GET 和 POST 请求 HttpURLConnection

Combined GET and POST requests HttpURLConnection

我正在寻找关于以下内容的一些建议,我有一个 HttpUtil class (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();
        }
        }

我正在寻找一种解决方案,以便一个 等待 另一个完成(第一个得到然后 post,最后得到),如果可能的话我想要保持此 util.class 完好无损,而不是将所有内容都放在 Asynctask (doInBackground) 中。 这是可能的还是我的方法不对?

请大家多多指教

提前致谢。

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

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

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

祝你好运!

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

中发送 post 请求的第二个 AsyncTask

您的 HttpUtil class 应该以某种方式发出响应已收到的信号。 例如,将此代码放入 HttpUtil 以指示操作结束:

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

此代码将等待操作结束:

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

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