2013-03-08 2 views
0

벽에 머리를 두 드리도록 한이 문제가 있습니다. JSON의 데이터를 데이터베이스에서 파싱하고 표시하는 신문 앱을 작성하고 있습니다. 응용 프로그램은 잘 작동하고 와이파이 및 4G에서 데이터를 전달하지만 3G에서 질식합니다. 대부분의 경우 Wi-Fi에서 1 초에서 2 초 정도 걸리며 3G에서 데이터를 가져 오는 데 30 초에서 1 분 정도 걸립니다. 나는 종종 경고 메시지를 받는다 : HttpHostConnectException : Connection refused. 나는 사이트가 완벽하게 작동하고 문제가없는 것으로 알고 있습니다. 문제가없는 데스크톱에서 탐색하는 것과 함께 WiFi 및 4G에서 정상적으로 쿼리 할 수 ​​있기 때문입니다. 또 다른 테스트로서, 우리 지역의 3G에있는 동료 인 MiFi를 빌려 내 장치를 연결했는데 인터넷에 3G로만 돌아 가면서 데이터를 전달합니다. 그래서 이것을보고 해결책을 찾으려고했을 때, 나는 제 마지막으로 무언가를하지 않을 수도 있다는 결론에 도달했습니다. 내가 아는 한 최선은 모든 것이 좋지만 나는 전문가가 아니다. 이것에 대한 어떤 통찰력이라면 크게 감사 할 것입니다.3G에서 JSON 구문 분석 결과 연결이 거부되었습니다.

Summary--

  • 4G는 = =
  • 와이파이 작동
  • 3G = 매우 느린
  • 3G 와이파이 (3G에는 MiFi)를 통해 = 작동

    공개 된 JSONObject makeHttpRequest 작동 (String url, String method, List params) {

    // Making HTTP request 
    try { 
    
        if(method == "GET"){ 
         // request method is GET 
         DefaultHttpClient httpClient = new DefaultHttpClient(); 
         String paramString = URLEncodedUtils.format(params, "utf-8"); 
         url += "?" + paramString; 
         HttpGet httpGet = new HttpGet(url); 
         HttpResponse httpResponse = httpClient.execute(httpGet); 
         HttpEntity httpEntity = httpResponse.getEntity(); 
         is = httpEntity.getContent(); 
         System.out.println("---GET--- Now grabing GET DATA"); 
        }   
    
    } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
        e.printStackTrace(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
    
    try { 
        BufferedReader reader = new BufferedReader(new InputStreamReader(
          is, "iso-8859-1"), 8); 
        StringBuilder sb = new StringBuilder(); 
        String line = null; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
        is.close(); 
        json = sb.toString(); 
    } catch (Exception e) { 
        Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 
    
    // try parse the string to a JSON object 
    try { 
        jObj = new JSONObject(json); 
    } catch (JSONException e) { 
        Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 
    
    // return JSON String 
    return jObj; 
    
    ,

    }

답변

0

똑같이 천천히 내는 MiFi의 3G인가? 그렇지 않으면 연결이 느린 곳에서 프로세스가 실패했다는 말을하는 것처럼 들립니다.

당신은 3G가 30을 초과한다고 말합니다. 앱 엔진에서 실행하고 있습니까? GAE는 거래가 소요될 수있는 시간에 대해 엄격한 제한을두고 있습니다. 그 한계는 30 초라고 생각합니다.

서버에 지연을 추가하여 Wi-Fi 요청에도 3G 테스트가 오래 걸리는 시간이 걸리므로 장애가 발생한 시간인지 확인하십시오.

또한 3G 결과는 다소 불량하다고 생각합니다. 얼마나 많은 데이터를 가져올 지 모르지만 오래 걸리는 것처럼 들리지는 않습니다. 따라서 아마도 3G 연결은 품질이 좋지 않은 연결 일뿐입니다. MiFi는 아마도 더 나은 3G 연결입니다.

+0

MiFi는 -69dBm의 타워에 연결되며 3G에만 있지만 데이터는 정상적으로 전달됩니다. 그래서 MiFi는 전화에 비해 속도가 똑같습니다. 나는 태블릿과 전화를 시험해 보았고 똑같은 문제를 겪었다. 이것은 http://pastebin.com/2PPRpkdw를 통해 전달 된 데이터의 평균 크기입니다. – gbrewster

+0

~ 3G에서 30 초 대 ~ 그렇지 않으면 이상한 일이 있습니다. 안드로이드에서 GAE 서버로의 JSON HTTP 요청을 처리하며, 서버가 차가 워진 경우를 제외하고는 3G에서 1 초 이내에 완료됩니다. 서버에서 시간을 측정 했습니까? – Tom

+0

신문사에서 관리하고 있기 때문에 웹 서버에 액세스 할 수 없지만 테스트를 위해 동일한 데이터베이스를 설정했습니다. 테스트 서버에 연결하면 정상적으로 작동하지만 라이브 데이터베이스에 연결할 때만 문제가 발생하는 것으로 보입니다 (3G 전용. WiFi는 훌륭하게 작동합니다). 지금까지 세 가지 장치를 테스트했으며 아직 분실 상태입니다. 내 책의 서버 문제를 가리키는 것이지만, 전화를 걸기 전에 신문 회사에 질문을하는 것은 그것이 나의 목적이 아닌지 확인하고 싶었습니다. – gbrewster