0

ボタンをクリックして、Androidデバイスの現在の場所を見つけようとしています。Geocoder を UIThread で実行すると UI がハングするため、バックグラウンド スレッドで実行する必要があります。私は AsyncTasks が初めてです。これまでのところ、このコード行がありますが、パラメーター、進行状況、結果がどうあるべきかは文字通りわかりません。何も入力したり、進行したりしたくありません。結果が現在のアドレスを表す文字列になるだけです。

前もって感謝します。

    public void onClickGetCCity(View v){
    new GetCurrentCity.execute();
    }  
       private class GetCurrentCity extends AsyncTask<Void, Void, Void>{



        @Override
                protected void doInBackground(Void... params) {

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);


Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROV

IDER);
                double longitude = location.getLongitude();
                double latitude = location.getLatitude();
                if(Geocoder.isPresent()){

                    Geocoder gcd = new Geocoder(getApplicationContext(), Locale.getDefault());
                    try {
                        List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
                        if(addresses != null) {
                            Address returnedAddress = addresses.get(0);

                            for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
                           strReturnedAddress = (returnedAddress.getAddressLine(i)).toString();
4

2 に答える 2

1

最初のパラメーター化された型は、doInBackground() への入力です。2 番目は onProgressUpdate() への入力です。3 番目は onPostExecute() への入力です。すべてを使用する必要はありません (つまり、1 つまたは複数を Void のままにしておくことができます)。

このクラスの javadoc には、これがどのように機能するかを説明する例があります: AsyncTask

于 2013-07-10T14:43:20.853 に答える
0

3 番目の型パラメーターは である必要がありますString。したがって、の署名doInBackgroundは次のとおりです。

public String doInBackground(Void... params)

アドレス文字列を取得したら、次から返しますdoInBackground

return strReturnedAddress;

メソッドを実装しonPostExecute(String result)ます。UI スレッドで実行されるため、結果をTextViewやトースト メッセージで表示できます。

于 2013-07-10T14:49:37.387 に答える