与Progressdialog的android AsyncTask错误

时间:2012-11-21 01:03:52

标签: android android-asynctask progressdialog

我的进度对话有问题,我找不到我做错了什么。 当我按下Localize按钮时,我的代码执行新的AsyncTask和progressDialog启动,但最后它会停止并显示错误。我认为这个问题是因为它需要做的太长。错误是这样的:

执行doInBackground()

时出错

我认为问题出在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(this)调用;

        @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 个答案:

答案 0 :(得分:0)

不要在doInBackground()中使用方法.setText()。这将导致错误。相反,您可以在onPostExecute()

中设置文字

将代码更改为

@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;    
}