什么应该是params,进展,这个AsyncTask的结果

时间:2013-07-10 14:33:07

标签: android android-asynctask

我试图通过单击按钮找到Android设备的当前位置。当在UIThread中运行时,Geocoder挂起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();

2 个答案:

答案 0 :(得分:1)

第一个参数化类型是doInBackground()的输入。第二个是onProgressUpdate()的输入。第三个是onPostExecute()的输入。你不需要全部使用它们(这意味着你可以把它们中的一个或多个留作Void)。

此类的javadoc有一个示例,解释了这一切是如何工作的:AsyncTask

答案 1 :(得分:0)

第三个类型参数应为String。所以doInBackground的签名是:

public String doInBackground(Void... params)

获取地址字符串后,从doInBackground返回

return strReturnedAddress;

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