正确使用HttpURLConnection的方法

时间:2015-08-11 07:01:28

标签: php android hibernate android-asynctask

这个问题是我上一个问题的一部分,但仍然没有答案。在这里你可以看到它。 24 Hour Android app connection with PHP web server

我正在使用HttpURLConnection从PHP网页下载一些文本。 App使用服务定期执行AsyncTask。我观察到,如果移动WiFi连接到没有互联网的路由器,有时(并非总是)应用程序的行为方式是它试图连接互联网而没有任何连接超时的影响,请在连接到网页时设置。即使互联网重新开始,应用程序也无所事事并继续尝试连接到互联网。

这种行为也可以通过几种方式检查Emulator。首先只需转动WLAN并等待30分钟再重新连接。您将看到HttpURLConnection将继续尝试连接到互联网,永远不会放弃,永远不会与互联网连接。如果我们休眠窗口并再次启动它,则可以观察到相同的行为。但它并不是一直发生的。

我认为我的方法使用HttpURLConnection而不是我的服务存在一些问题。请帮我解决这个问题。这是我的源代码。

class DownloadInfo extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... url) {
            // constants
            try {

                System.setProperty("http.keepAlive", "false"); // also checked without this line.

                HttpURLConnection connection = (HttpURLConnection) new URL(url[0]).openConnection();
                connection.setDoOutput(true);
                connection.setConnectTimeout(30000); // miliseconds
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Connection", "Keep-Alive"); // also checked with "Connection", "Close"
                connection.setRequestProperty("Charset",  "UTF-8");
                connection.setRequestProperty("Content-Type",
                        "application/x-www-form-urlencoded;charset=" + "UTF-8");
                Uri.Builder builder = new Uri.Builder()
                        .appendQueryParameter("user", "1111")
                        .appendQueryParameter("pass", "1111");
                String query = builder.build().getEncodedQuery();
                OutputStream os = connection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                writer.write(query);
                writer.flush();
                writer.close();
                os.close();
                InputStream is = connection.getInputStream();
                BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                StringBuffer response = new StringBuffer();
                String line = "";
                while((line = rd.readLine()) != null) {
                    response.append(line);
                    response.append('\r');
                }
                rd.close();
               // also tried  is.close(); AND  connection.disconnect();

                line = response.toString();
                return line;
            } catch (Exception e) {
                Log.w("MyApp", "Download Exception : " + e.toString());
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {

                if (result != null) {

                }
        }

0 个答案:

没有答案