同じコードを使用して、複数のアプリケーションがサーバーに対してHttpsURLConnectionを作成しています。時々私はデバイスとの通信を行うことができませんが、同じHttpsURLConnectionコードを同じサーバアドレスに実行している別のデバイスは問題ありません。Android Studio断続的なHttpsURLConnectionの失敗
時には、最初のデバイスが複数の試みを一見して接続することがあります。ただし、デバイス上のWi-Fi接続をリセットすると、すぐに修正されます。
これは、サーバーに接続されているルータがルーティングテーブルからデバイスを削除していると私には信じられていますが、コード上で余分な目を見ていただければ幸いです。
私は次のコードでの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が存在しないことです。
この問題を理解していただきありがとうございます。
これはあなたのコードとは関係ありません。しかし、あなたが説明したようなデバイスで。 – greenapps
ありがとうございました。私が追加することを忘れたことの1つは、HttpUrlConnectionsが他のアプリ、YouTube、Googleのエストを経由してインターネットに接続できることを止めるデバイスですが、インターネットとサーバーはどちらも同じルータにあります。 – matthew