2012-11-21 5 views
0

진행률 대화 상자에 문제가있어서 잘못된 작업을 찾을 수 없습니다. Localize 버튼을 누르면 코드가 새로운 AsyncTask를 수행하고 progressDialog가 시작되지만 마침내 코드 자체가 중지되고 오류가 표시됩니다. 나는 문제가 너무 길기 때문에 그것이라고 생각한다. 이 오류는 이것이다 : doInBackground을 실행하는 동안android AsyncTask error with ProgressDialog

오류가()

나는 문제가 publishProgress()로 생각하지만 어디에 어떻게 사용 몰라 발생했습니다. 여기

내 코드 :

public class GPSLocation extends AsyncTask<Void, Void, Void> 
{ 
    boolean running =true; 
    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
     pd = new ProgressDialog(Configuracion.this); 
     pd.setOnCancelListener(new DialogInterface.OnCancelListener(){ 
      public void onCancel(DialogInterface dialog) { 
       pd.cancel(); 
      } 
     }); 
     longitude=0; 
     latitude =0; 
     getLonLat(); 
     pd.setCancelable(true); 
     pd.setMessage("Getting GPS Location..."); 
     pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     pd.show(); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
     pd.setProgress(1); 
     // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 
     pd.dismiss(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     boolean isDataSubmitted = false; 
     while(!isDataSubmitted) 
     { 
      if(longitude !=0 && latitude!=0) 
      { 
       isDataSubmitted = true; 
       Log.d("LONGITUD", ""+longitude); 
       Log.d("LATITUDE", ""+latitude); 
       longitud.setText(String.valueOf(longitude)); 
       latitud.setText(String.valueOf(latitude)); 
      } 
     } 

     return null;  
    } 
} 

이 같이 GpsLocation 클래스의 부족, 그리고 Localize.setOnclicklistener (이)에서 호출; 여기

 @Override 
    public void onClick(View v){ 

     if (v.getId() == R.id.localiza){ 

      new GPSLocation().execute(); 
      } 
     } 

이 방법

public void getLonLat(){ 

     LocationManager milocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     LocationListener milocListener = new MiLocationListener(); 
     if (milocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      milocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,milocListener); 

     }else if (milocManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
      milocManager.requestLocationUpdates(
      LocationManager.NETWORK_PROVIDER, 0, 0, milocListener); 
     } 

    } 

감사합니다.

+1

에 코드를 Chnage

onPostExecute()

에서의 setText 수 있습니다 "내 진행 대화 상자에 문제가있는"문제는 무엇인가? – Sam

+0

죄송합니다 ... 깜빡 했으니 .. – croigsalvador

+0

stacktrace를 게시 할 수 있습니까? – FoamyGuy

답변

0

doInBackground() 메서드 .setText()을 사용하지 마십시오. 오류가 발생합니다. 대신 당신이

@Override 
protected void onPostExecute(Void result) 
{ 
    pd.dismiss(); 
    longitud.setText(String.valueOf(longitude)); 
    latitud.setText(String.valueOf(latitude)); 
} 

@Override 
protected Void doInBackground(Void... params) { 
    boolean isDataSubmitted = false; 
    while(!isDataSubmitted) 
    { 
     if(longitude !=0 && latitude!=0) 
     { 
      isDataSubmitted = true; 
      Log.d("LONGITUD", ""+longitude); 
      Log.d("LATITUDE", ""+latitude); 
     } 
    } 
    return null;  
} 
+1

저는 이것이 올바른 것이라고 생각합니다. OP에 대한 추가 정보는 UI 스레드에서 UI 변경을 실행해야합니다. 비동기 작업에서는 onPreExecute(), onProgressUpdate (Progress ...) 및 onPostExecute (Result) –

+0

-1에서 주석을 읽고이를 답변으로 추가 할 수 있습니다. – jnthnjns

+0

@Asok, 나는 답을 알고있다. 그게 내가 여기에 게시하는거야. 나는 단지 사용자를 돕고 싶다. 하지만 그 밖의 것은 없습니다 ... –