2017-11-18 8 views
0

同じコードを使用して、複数のアプリケーションがサーバーに対して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が存在しないことです。

この問題を理解していただきありがとうございます。

+0

これはあなたのコードとは関係ありません。しかし、あなたが説明したようなデバイスで。 – greenapps

+0

ありがとうございました。私が追加することを忘れたことの1つは、HttpUrlConnectionsが他のアプリ、YouTube、Googleのエストを経由してインターネットに接続できることを止めるデバイスですが、インターネットとサーバーはどちらも同じルータにあります。 – matthew

答えて

1

デバッグとテストの数ヶ月が経っても短い話がありましたが、問題が見つかりました。休憩室の電子レンジが見つかりました。

イエップ;アンテナが固定された壁の反対側で使用されているマイクロ波からの干渉に起因して、無線LANの落ち着きが一見無作為であった。

関連する問題