2014-10-21 2 views
-1

asyncTask를 사용하여 http 요청을 작성했으며 따라서 진행률 표시 줄을 사용하여 해당 스레드의 진행 상황을 나타냅니다. 모든 것은 잘 작동하는데, onPostexecute() 메서드가 호출 될 때 Logcat에 응답 문자열이 표시되었지만 진행률 표시 줄이 종료되지 않습니다.진행률 막대가 종료되지 않는 이유는 무엇입니까?

비슷한 질문이 있지만 문제의 해결 방법을 찾지 못했습니다. 도와주세요. 당신은 당신이 생각하는 (또는 원하는) 당신이 할 ProgressDialog 인스턴스에서 dismiss()를 호출하지 않는

class RequestTask extends AsyncTask<String, Integer, String> { 
     @SuppressWarnings("static-access") 
     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      prgDialog=new ProgressDialog(getActivity()); 
      prgDialog.setCancelable(true); 
      prgDialog.show(getActivity(), null, "Loading..."); 
     } 

     @Override 
     protected String doInBackground(String... uri) { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response; 
      String responseString = null; 
      try { 
       response = httpclient.execute(new HttpGet(uri[0])); 
       StatusLine statusLine = response.getStatusLine(); 
       if (statusLine.getStatusCode() == HttpStatus.SC_OK) { 
        ByteArrayOutputStream out = new ByteArrayOutputStream(); 
        response.getEntity().writeTo(out); 
        out.close(); 
        responseString = out.toString(); 
       } else { 
        // Closes the connection. 
        response.getEntity().getContent().close(); 
        throw new IOException(statusLine.getReasonPhrase()); 
       } 
      } catch (ClientProtocolException e) { 
       // TODO Handle problems.. 
      } catch (IOException e) { 
       // TODO Handle problems.. 
      } 
      return responseString; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      Log.d("result", result); 
       prgDialog.dismiss(); 
      // Do anything with response.. 
     } 
    } 
+0

'super.onPostExecute()'앞에'prgDialog.dismiss();'를 넣으려고 했습니까? –

+0

예, 했어요. 그러나 그것은 효과가 없었습니다. – Harsha

+1

onPostExecute() 메서드가 호출되고 있습니까? – joao2fast4u

답변

5

:

여기 내 코드입니다. 당신은 ProgressDialog를 생성 만 호출 할 prgDialog 참조에 할당 : 당신이 ProgressDialog을 보여주는 또 다른하지 않도록 prgDialog 때문에 포인트를 해고하지 않는 ProgressDialog새로운 인스턴스를 생성합니다

prgDialog.show(getActivity(), null, "Loading..."); 

합니다. 시도해보십시오 :

protected void onPreExecute() { 
    super.onPreExecute(); 
    prgDialog = ProgressDialog.show(getActivity(), null, "Loading..."); 
} 

이 때문에 클래스의 일부 인스턴스가 아닌 클래스에 정적 메서드를 호출해야합니다.

+0

예, 이제 해결책을 알았습니다 : D – kemdo

+0

도움 주셔서 감사합니다. – Harsha

관련 문제