【问题标题】:Android Studio Intermittent HttpsURLConnection FailureAndroid Studio 间歇性 HttpsURLConnection 失败
【发布时间】:2017-11-18 06:46:13
【问题描述】:

我有多个应用程序使用相同的代码创建到服务器的 HttpsURLConnection。有时我无法与设备进行任何通信,但运行相同 HttpsURLConnection 代码到相同服务器地址的不同设备可以正常工作。

有时第一个设备会在多次尝试后自行建立连接。但是,重置设备上的 wifi 连接总是会立即修复它。

这让我相信连接到服务器的路由器正在将设备从其路由表中删除,但我希望能多看一眼代码。

我有一个单独的活动来使用以下代码创建 HttpsURLConnection:

class WebRequest {

static String response = null;
public final static int GET = 1;
private final static int POST = 2;

//Constructor with no parameter
public WebRequest() {

}

/**
 * Making web service call
 *
 * @url - url to make request
 * @requestmethod - http request method
 */
public String makeWebServiceCall(String url, int requestmethod) {
    return this.makeWebServiceCall(url, requestmethod, null);
}

/**
 * Making service call
 *
 * @url - url to make request
 * @requestmethod - http request method
 * @params - http request params
 */
private String makeWebServiceCall(String urladdress, int requestmethod,
                                  HashMap<String, String> params) {
    URL url;
    String response = "";
    try {
        url = new URL(urladdress);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setDoInput(true);

        if (requestmethod == POST) {
            conn.setRequestMethod("POST");
        } else if (requestmethod == GET) {
            conn.setRequestMethod("GET");
        }

        if (params != null) {
            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));

            StringBuilder result = new StringBuilder();
            boolean first = true;
            for (Map.Entry<String, String> entry : params.entrySet()) {
                if (first)
                    first = false;
                else
                    result.append("&");

                result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
                result.append("=");
                result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
            }

            writer.write(result.toString());

            writer.flush();
            writer.close();
            os.close();
        }

        int responseCode = conn.getResponseCode();

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            String line;
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            while ((line = br.readLine()) != null) {
                response += line;
            }
        } else {
            response = "";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return response;
}

}

我在 Asynctask 中使用它从另一个活动调用该代码:

WebRequest webreq = new WebRequest();

request = webreq.makeWebServiceCall(URL, WebRequest.GET);

我担心代码中的某些内容会导致该设备出现间歇性连接问题。我注意到的一件事是没有connection.disconnect。

感谢您对此问题的任何见解!

【问题讨论】:

  • 与你的代码无关。但是正如你所解释的那样使用那个设备。
  • 感谢您的浏览。我忘记添加的一件事是停止生成 HttpUrlConnections 的设备能够通过其他应用程序、YouTube、Google est 连接到 Internet。但是 Internet 和服务器都在同一个路由器上。

标签: android android-studio httpurlconnection


【解决方案1】:

长话短说,经过几个月的调试和测试,我发现了问题......休息室里的微波炉。

是的; wifi 掉线看似随机的性质是由于在天线固定的墙的另一侧使用微波的干扰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2019-04-18
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多