0

AsyncTaskコンカレントアクティビティの開始時に作成したダイアログを非表示にする必要があります。しかし、onPostExecute()にdialog.dismiss()を挿入しようとしましたが、ダイアログがまったく表示されません。

GPSの緯度と経度を取得しています。そのときにProgressDialogを表示したいと思います。そしてそれは表示されますが、活動の後、私はそれを却下することはできません。

これがコーディングです。

public class SearchActivity extends Activity {

    private ProgressDialog dialog;

    private static String PROVIDER = LocationManager.GPS_PROVIDER;
    private LocationManager locationManager;

    double longitude = 0.0;
    double latitude = 0.0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();

        if (extras == null) {
            Toast.makeText(this, "Something Wrong existing....",
                    Toast.LENGTH_SHORT).show();
            finish();
        }

        String utterance = extras.getString("utterance");
        String location = extras.getString("location");

        if (location == null) {
            dialog = ProgressDialog.show(this, "",
                    "Searching your location...", true);
            dialog.setCancelable(true);
            new GPSLocator().execute();

        }else{
            Toast.makeText(getApplicationContext(), "Location is from SpeechRecognizer Activity", Toast.LENGTH_LONG).show();
        }

    }

    public class GPSLocator extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            String info = getLocation();

            return info;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();

                    dialog.dismiss();
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
        }

        public String getLocation() {

            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            Location loc = locationManager.getLastKnownLocation(PROVIDER);

            if (loc == null) {
                return "GPS is not available. Location is null";
            } else {
                latitude = loc.getLatitude();
                longitude = loc.getLongitude();

                return String.valueOf(latitude) + " - "
                        + String.valueOf(longitude);

            }

        }

    }

}
4

1 に答える 1

2

AsyncTaskクラスのonPreExecute()内のダイアログボックスを初期化する必要があります。使用:

if (location == null) {
            dialog = ProgressDialog.show(this, "",
                    "Searching your location...", true);
            dialog.setCancelable(true);}

名前が示すようにOnPreExecuteは、他のすべてのメソッドの前に実行されるため、

1)onPreExecute:ダイアログボックスの初期化

2)doinbackground:あなたのことをして

3)onPostExecuteは結果を使用し、ダイアログを閉じます。

参照:http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-08-13T17:36:34.890 に答える