异步调用Web服务而不等待响应

时间:2015-12-19 07:55:11

标签: android web-services asynchronous

我有一个情况,我有2个按钮。 在每个按钮上单击,我正在调用一个Web服务,它返回一些消息(例如,它在按钮1单击时返回“按钮1单击”,在按钮2单击时返回“按钮2单击”)。

在我的网络方法中,我已经为按钮2的响应定义了3秒的延迟。

现在,当我单击按钮1时,我立即收到返回消息(“按钮1单击”)然后当我单击按钮2时,我得到返回消息(“按钮2单击”)3秒后,这是细

如果我单击按钮2然后单击按钮1,那么除非按钮2的响应消息未到来(即3秒后),否则按钮1响应消息也会延迟。

我想删除此延迟,即只要点击按钮1,就应该收到响应消息。

请建议如何实现这一目标。

这是我的内心阶层:

private class UseDataForCommunication extends AsyncTask<String, Void, Void> {
    String receivedContent = "";
    String error = "";

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(String... params) {
        /************ Make Post Call To Web Server ***********/
        BufferedReader reader = null;

        // Send data
        try {

            // Defined URL  where to send data
            URL url = new URL(params[0]+params[1]);


            // Send POST data request

            URLConnection conn = url.openConnection();

            // Get the server response

            reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;

            // Read Server Response
            while ((line = reader.readLine()) != null) {
                // Append server response in string
                sb.append(line + " ");
            }

            // Append Server Response To Content String
            receivedContent = sb.toString();
        } catch (Exception ex) {
            error = ex.getMessage();
        } finally {
            try {
                reader.close();
            } catch (Exception ex) {
            }
        }

        /*****************************************************/
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        try {
            JSONObject jsonObject = new JSONObject(receivedContent);
            String parsedResponse = jsonObject.optString("respone");
            receivedMessageViaDataConnection(parsedResponse);

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}

这是我从每个按钮点击的电话:

new UseDataForCommunication().execute(AppConstants.TRANSMIT_URL,message);

1 个答案:

答案 0 :(得分:1)

您可以使用executeOnExecutor

执行多个AsyncTask
 if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
    new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    new MyAsyncTask().execute();
}

了解更多check this