0

進行状況ダイアログに問題があり、何が間違っているのかわかりません。ローカライズボタンを押すと、私のコードは新しい 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);
        }

    }

ありがとうございました。

4

1 に答える 1

0

.setText()doInBackground()でメソッドを使用しないでください。エラーになります。代わりに、テキストを設定できます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;    
} 
于 2012-11-21T02:55:25.673 に答える