2013-01-23 16 views
0

我搶從做反向地理編碼(transfering從數字的位置,以文本)Android的網站代碼ReverseGeocodingTask任務的方法

它工作正常,但因爲我的應用程序已經改變了一點,我需要改變這段代碼變成了一個正常的方法,現在它是一個AsyncTask。它應該得到一個位置並返回一個字符串。

此代碼是有點怪我,所以我需要你的幫助球員:

private class ReverseGeocodingTask extends AsyncTask<Location, Void, Void> 
{ 
    Context mContext; 

    public ReverseGeocodingTask(Context context) 
    { 
     super(); 
     mContext = context; 
    } 

    @Override 
    protected Void doInBackground(Location... params) 
    { 
     Geocoder geocoder = new Geocoder(mContext, Locale.getDefault()); 

     Location loc = params[0]; 
     List<Address> addresses = null; 
     try { 
      addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      // Update address field with the exception. 
      LocationService.this.address = e.toString(); 
     } 
     if (addresses != null && addresses.size() > 0) 
     { 
      Address address = addresses.get(0); 
      // Format the first line of address (if available), city, and country name. 
      String addressText = String.format("%s, %s, %s", 
        address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "", 
        address.getLocality(), 
        address.getCountryName()); 
      // Update address field on UI. 
      // Message.obtain(mHandler, UPDATE_ADDRESS, addressText).sendToTarget(); 
      LocationService.this.address = addressText; 
     } 
     return null; 
    } 
} 
+1

反向地理編碼需要大量的時間,你不應該在UI線程上完成。你想達到什麼目的? – JeffS

+0

在將位置發送到數據庫的線程上。所以在我發送它之前,我想將它轉換成一個字符串。 –

回答

1

您通過製作方法,像這樣

public String reverseGeocode(Location loc) { 


} 

變化,抓住第一個位置的行開始,是唯一使用的,並刪除它 - 你已經有loc

//Location loc = params[0]; 

然後,而不是設置地址爲t帽子定位服務,只返回:

//LocationService.this.address = addressText; 
return addressText; 

拼接的進入方法,刪除不必要的return語句的結束,你是金色的。

仔細一看,我也看到一個例外,你只是想拋出鏈而不是在這個方法內處理。讓它在任何情況下都可以通過你的方法調用來處理:這種方法可以解決這個問題。

+0

謝謝,但是情況怎麼樣?我從哪裏獲取這個實例? –

+0

無論你現在從哪裏得到它。您仍然需要相同的上下文。 – corsiKa