【发布时间】: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