2011-10-18 5 views
1

문제가 있습니다. 나는 웹 서비스에 연결하여 데이터를 가져와 데이터베이스에 저장하는 asynctask를 가지고있다. 그게 다 잘 됐네. 하지만 문제가 생겼습니다. 웹 서비스를 수행 할 때 새로 고침을 클릭하면 진행 막대를 놓고 싶습니다.안드로이드 - Webservice AsyncTask가 느린 ProgressDialog

새로 고침을 실행하면 화면이 정지 된 후 2 초가 지나면 진행 표시 줄을 조금 누른 다음 사라지지만 진행 표시 줄이 시작되기 전에 실행이 완료됩니다. .. 덕분

여기

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> { 
     private static final String DEBUG_TAG = "actualizo"; 
     private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this); 

     @Override 
     protected void onCancelled() { 
      Log.i(DEBUG_TAG, "onCancelled"); 

       pd.dismiss(); 

     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      Log.i(DEBUG_TAG, "onPostExecute"); 

       pd.dismiss(); 

     } 

     @Override 
     protected void onPreExecute() { 

      pd.setMessage("Actualizando..."); 
      pd.show(); 


     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 



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


      webService(); 

      tv2 = resultado.toString();   //Obtengo el string resultado del WebService en tv2 

      //Obtengo la hora actual 

      insertoEnBD(); 
      // Inserto en base de datos (Si es que pase por el Web Service) 
      Boolean res = true; 
      return res; 



     } 







    } 

Webservice를는 웹 서비스의 conection에의 방법이다 AsyncTask를의 코드이며, i가 데이터베이스에 데이터를 입력 할 때 "InsertoBD는"

+0

나는 당신의 AsyncTask를 구현에서 아무 잘못 표시되지 않습니다, 어떻게 진행률 표시 줄이 시작되기 전에 작업이 완료되었음을 알고 있습니까? 귀하의 설명에 따르면, 2 초 동결과는 별도로 AsyncTask : 진행률 표시 -> 작업 완료가 빠름 -> 진행률 표시 줄이 취소 된 것으로 예상됩니다. – yorkw

+0

원인 내 UI가 새로 고쳐지고 데이터가 변경됩니다 .. 그리고 progressbar가 시작되는 것을 본 후에 .. –

+0

doInBackground()의 모든 코드를 주석으로 처리하고 Log.i (TAG, "do something")를 수행하면됩니다. UI 새로 고침이 실제로 doInBackground()에서 발생하는지 확인하십시오. 이렇게하면 logcat에서 onPreExecute() 후에 doInBackground()가 호출되는지 확인할 수 있습니다. 나는 당신의 코드에서 메인 쓰레드에서 같은 무거운 작업을하는 다른 곳이있을 것이라고 생각한다. 새로 고침 버튼을 클릭 할 때 2 초 동결한다고 설명한다. – yorkw

답변

0

방식을 변경 시도 이로해서 ProgressDialog를 초기화 :

 @Override 
    protected void onPreExecute() { 
     pd = ProgressDialog.show(context, "", "My text is here..."); 
    } 

참고, 당신은 테스트 용으로 만 에뮬레이터를 사용하는 경우, ProgressDialogs가 나타나는에서 속도가 느려질 수 있습니다/사라지고 의미 당신의 장치에서 테스트하면 문제가 없을 수 있습니다.

+0

나는 장치에 그것을 시험하고 나는 동일한 문제가있다. –

0

환경 활동에서 ProgressDialog를 선언하는 것이 좋습니다. 그런 다음이 코드를 사용해보십시오. 그것은 나를 위해 작동 : AsyncTask를 선언

환경 클래스 :

private ProgressDialog dialog; 

... 

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> { 
     private static final String DEBUG_TAG = "actualizo"; 

... 
@Override 
     protected void onPreExecute() { 

        pd = new ProgressDialog(ShamanOperativoActivity.this); 

      pd = ProgressDialog.show(getParent().getParent(), "Wait", 
        "Loading..."); 


     } 
... 
+0

나는 이것을 이해하지 않는다, 나는 나의 종류에있는 대화를 선언하고, 그 후에 나의 asynctask 종류에있는 pd를 사용 하는가? 이 코드를 시도하고 nullpointer 예외에 의해 강제 종료를 보여줍니다 .. –

+0

두 클래스를 동일한 .java 파일에 배치해야합니다. – atzu

0

을 시도해보십시오이 하나 .....

private class tareaActualizar extends AsyncTask<Void, Void, Void> 

{ 

private static final String DEBUG_TAG = "actualizo"; 

     private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this); 

     protected void onPreExecute() { 
       pd.setMessage("Actualizando..."); 
      pd.show(); 

     } 

     protected Void doInBackground(Void... para) { 

       webService(); 

      tv2 = resultado.toString();   //Obtengo el string resultado del WebService en tv2 

      //Obtengo la hora actual 

      insertoEnBD(); 
      // Inserto en base de datos (Si es que pase por el Web Service) 
      Boolean res = true; 
      return res; 


     } 

     protected void onPostExecute(Void params) { 

       pd.dismiss(); 

     } 
    } 
관련 문제