2013-07-10 17 views
0

我想通過單擊按鈕找到android設備的當前位置。在UIThread中運行時,地理編碼器會掛起UI,因此我必須在後臺線程上運行它。我是AsyncTasks的新手。到目前爲止,我有這一行代碼,但我幾乎不知道參數,進度,結果必須是什麼。我不想要輸入任何內容,也不需要進度,只是結果是呈現當前地址的字符串。什麼應該params,進度,這個AsyncTask的結果是

預先感謝您。

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(); 

回答

1

第一個參數化類型是doInBackground()的輸入。第二個是onProgressUpdate()的輸入。第三個是onPostExecute()的輸入。你不需要全部使用它們(這意味着你可以將它們中的一個或多個作爲Void)。

這個類的Javadoc具有解釋這一切是如何工作的例子:AsyncTask

0

第三類參數應該是String。所以doInBackground的簽名是:

public String doInBackground(Void... params) 

後你得到的地址字符串,從doInBackground返回它:

return strReturnedAddress; 

實現該方法onPostExecute(String result)。由於它在UI線程上運行,因此可以在TextView或Toast消息中顯示結果。