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() 的输入。第二个是 onProgressUpdate() 的输入。第三个是 onPostExecute() 的输入。您不需要全部使用它们(这意味着您可以将其中的一个或多个保留为 Void)。

这个类的 javadoc 有一个例子来解释这一切是如何工作的:AsyncTask

于 2013-07-10T14:43:20.853 回答
0

第三个类型参数应该是String. 所以签名doInBackground是:

public String doInBackground(Void... params)

获得地址字符串后,将其从以下位置返回doInBackground

return strReturnedAddress;

实现方法onPostExecute(String result)。由于它在 UI 线程上运行,因此您可以在TextView消息或 toast 消息中显示结果。

于 2013-07-10T14:49:37.387 回答