2017-11-18 9 views
0

서버에 HttpsURLConnection을 만들기 위해 동일한 코드를 사용하는 여러 응용 프로그램이 있습니다. 때때로 장치와 통신 할 수 없지만 동일한 HttpsURLConnection 코드를 실행하는 다른 장치가 동일한 서버 주소에 아무런 문제가 없습니다.Android Studio 일시적인 HttpsURLConnection 오류

때로는 첫 번째 장치가 여러 번 시도한 후에 연결을 시도하는 경우가 있습니다. 그러나 기기의 Wi-Fi 연결을 재설정하면 즉시 수정됩니다.

이것은 내가 서버에 연결된 라우터가 라우팅 테이블에서 장치를 떨어 뜨리고 있다고 생각하게 만들었지 만, 코드에서 눈을 띄워 주셔서 감사합니다.

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); 

내가 그 걱정을

나는 다음과 같은 코드로 HttpsURLConnection에를 만들기 위해 별도의 활동이 코드 내의 어떤 요소로 인해 해당 장치에서 간헐적 인 연결 문제가 발생합니다. 내가 알아챈 한 가지는 connection.disconnect가 없다는 것입니다.

이 문제에 대한 통찰력을 가져 주셔서 감사합니다.

+0

코드와 관련이 없습니다. 하지만 당신이 설명하는대로 그 장치. – greenapps

+0

감사합니다. 내가 잊어 버린 점은 HttpUrlConnections를 만드는 것을 멈추는 장치가 다른 응용 프로그램 인 YouTube, Google 에스트를 통해 인터넷에 연결할 수 있다는 것입니다. 그러나 인터넷과 서버는 모두 같은 라우터에 있습니다. – matthew

답변

1

몇 달 간의 디버깅과 테스트가 끝나면서 짧은 이야기를 들었습니다. 문제가 발생했습니다. 휴게실에 전자 레인지가 있습니다.

옙; 안테나가 고정 된 벽면의 다른 쪽에서 사용되는 마이크로 웨이브의 간섭으로 인해 WiFi가 떨어지는 것처럼 보였습니다.