2014-07-24 2 views
0

Android 기기에서 웹 서비스를 호출하는 중 이상한 문제가 있습니다.웹 서비스에 대한 닫기 요청 관련 문제

처음 웹 서비스 (REST)를 호출하면 ws 호출은 약 100ms 후에 실행됩니다. 몇 초 후에 다시 시도하면 전화가 약 20 초 동안 지속됩니다.

웹 서비스에 대한 많은 후속 호출을 수행하는 경우 POSTMAN (테스트 용)을 사용하여 모든 문제점을 볼 수 없습니다. 모든 요청은 약 200ms 이내에 처리됩니다.

그래서 문제는 내 Android 클라이언트에 있다고 생각합니다.

다음은 내가 WS를 호출하기 위해 사용하는 코드가있다 :

public class DownloadTask extends AsyncTask<Void, Void, Void>{ 

    private Context context; 

    public DownloadTask(Context context){ 
     this.context = context; 
     contactList = new ArrayList<Contact>(); 
    } 

    @Override 
    protected void onPreExecute() { 
     if (mCallbacks != null) { 
      mCallbacks.onPreExecute(); 
      } 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     if(Utils.isOnline(context)) 
     { 
      int resCode = -1; 

      String wsURI = "myuri..."; 
      HttpGet request = new HttpGet(wsURI); 
      request.setHeader("Content-Type", "application/json"); 

      try{ 
       // Send request to service 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpResponse response = httpClient.execute(request); 
       resCode = response.getStatusLine().getStatusCode(); 

       if(resCode == 200){ 
        BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
        String line=""; 
        StringBuffer returnFromServer = new StringBuffer(); 

        while ((line=in.readLine())!=null) 
        { 
         returnFromServer.append(line); 
        } 

        Gson gson = new GsonBuilder().create();      
        contactList = gson.fromJson(returnFromServer.toString(), new TypeToken<ArrayList<Contact>>(){}.getType()); 
       } 
      }catch(Exception ex){ 
       ex.printStackTrace(); 
      } 

     } 

     return null;   
    } 
} 

편집 : 나는 디버그 내 응용 프로그램을 실행하는 것을 시도했다, 나는 문제가 여기에있을 것 같다 것을 볼 수 있습니다

HttpResponse response = httpClient.execute (request);

두 번째 (첫 번째에 가까운) 호출이 약 10/20 초 동안 지속되는 동안 처음으로 즉시 실행됩니다.

+0

내가 URL을 볼 수 있습니다 .. – User

+0

가 아니, 그들은 – GVillani82

+0

그런 다음 다음 urls..1 시도 음부)이다 @Mobile 미안 해요 http://sarangasl.blogspot.in/2011/10/android- web-service-access-tutorial.html 2) http://ihofmann.wordpress.com/2013/01/23/android-sending-post-requests-with-parameters/ – User

답변

0

제안 된 해결책을 시도했습니다. 결과는 here입니다. 마지막으로 나는 DefaultHttpClient 또는 AndroidHttpClient의 사용을 피하려고합니다. 이는 HttpURLConnection입니다. 이것은 문제를 해결합니다.

doInBackground 방법 아래에는 HttpURLConnection이 사용됩니다.

protected Void doInBackground(Void... params) { 

    if(Utils.isOnline(context)) 
    { 
     String wsURI = "myUriAddress..."; 
     InputStream inp=null; 

     try{ 
      URL url = new URL(wsURI); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.addRequestProperty("Content-Type", "application/json"); 

      inp = new BufferedInputStream(urlConnection.getInputStream()); 

      if(urlConnection.getResponseCode() == 200){ 
       BufferedReader in = new BufferedReader(new InputStreamReader(inp, "UTF-8")); 
       String line=""; 
       StringBuffer returnFromServer = new StringBuffer(); 

       while ((line=in.readLine())!=null) 
       { 
        returnFromServer.append(line); 
       } 

       in.close(); 
       inp.close(); 

       Log.i("doInBackground",""+returnFromServer.toString()); 

       Gson gson = new GsonBuilder().create();      
       contactList = gson.fromJson(returnFromServer.toString(), new TypeToken<ArrayList<Contact>>(){}.getType()); 
      } 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 

    } 
    return null;    
}