2010-09-01 38 views
16

Tôi muốn sử dụng Geocoder trong một ứng dụng android, tôi đã có những đoạn mã sau đây để lấy mẫu nó:Android; Bộ mã hóa địa lý, tại sao tôi nhận được "dịch vụ không khả dụng"?

public class LocatorGeo extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     Geocoder geo = new Geocoder(getApplicationContext()); 

     List<Address> myAddrs = new ArrayList<Address>(); 

     try { 
      myAddrs = geo.getFromLocationName("CO100AR", 1); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

tôi nhận được stack trace sau:

09-01 15:52:38.809: WARN/System.err(334): java.io.IOException: Service not Available 
09-01 15:52:38.819: WARN/System.err(334):  at android.location.Geocoder.getFromLocationName(Geocoder.java:159) 
09-01 15:52:38.829: WARN/System.err(334):  at com.jameselsey.LocatorGeo.onCreate(LocatorGeo.java:25) 
09-01 15:52:38.829: WARN/System.err(334):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-01 15:52:38.839: WARN/System.err(334):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-01 15:52:38.849: WARN/System.err(334):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-01 15:52:38.849: WARN/System.err(334):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-01 15:52:38.868: WARN/System.err(334):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-01 15:52:38.868: WARN/System.err(334):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-01 15:52:38.879: WARN/System.err(334):  at android.os.Looper.loop(Looper.java:123) 
09-01 15:52:38.889: WARN/System.err(334):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-01 15:52:38.899: WARN/System.err(334):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-01 15:52:38.909: WARN/System.err(334):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-01 15:52:38.919: WARN/System.err(334):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-01 15:52:38.929: WARN/System.err(334):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-01 15:52:38.929: WARN/System.err(334):  at dalvik.system.NativeStart.main(Native Method) 

Tại sao dịch vụ Không sẵn có? Tôi đã điều sau đây trong manifest

<uses-permission android:name="android.permission.INTERNET"/> 

Các documentation tiểu bang của tôi: The Geocoder class requires a backend service that is not included in the core android framework, làm thế nào/nơi tôi có thể có được một dịch vụ như vậy?

+1

Có vẻ tôi không phải là người duy nhất: http://code.google.com/p/android/issues/detail?id= 8816 – Jimmy

+1

Đối với bất kỳ ai ngoài đó. Có cùng một vấn đề, có vẻ như sử dụng Geocoder trên trình mô phỏng là vô ích. Tôi chỉ kiểm tra nó trực tiếp trên điện thoại, bạn cũng có thể sử dụng [isPresent()] (http://developer.android.com/reference/android/location/Geocoder.html#isPresent()) để kiểm tra có một bộ mã hóa địa lý thực hiện. – gideon

Trả lời

19

Đó là một lỗi trong các giả lập cho 2,2 http://code.google.com/p/android/issues/detail?id=8816

+7

Oh đau buồn, điều này là đủ để làm cho em bé jesus khóc. – skaffman

+0

Rất buồn ... Vẫn gặp sự cố này sau một năm. –

+1

được cho là đã cải tiến trình giả lập trong SDK 4.0 dành cho ICS. Bạn đã thử sử dụng chưa? Có thể họ đã sửa nó. –

2

Tôi cũng đã phải đối mặt với loại vấn đề như geo.getFromLocationName trở lại null hoặc loại trừ để tìm thay đổi giải pháp thuần là tôi đã sử dụng Google api để có được lat/dài và đây là link for reference.

0

Điều này được khắc phục trong trình giả lập 4.0.

11

Đây chỉ là giải pháp cho vấn đề này ....

public static JSONObject getLocationInfo(String address) { 

     HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address=" +address+"&ka&sensor=false"); 
     HttpClient client = new DefaultHttpClient(); 
     HttpResponse response; 
     StringBuilder stringBuilder = new StringBuilder(); 

     try { 
      response = client.execute(httpGet); 
      HttpEntity entity = response.getEntity(); 
      InputStream stream = entity.getContent(); 
      int b; 
      while ((b = stream.read()) != -1) { 
       stringBuilder.append((char) b); 
      } 
     } catch (ClientProtocolException e) { 
     } catch (IOException e) { 
     } 

     JSONObject jsonObject = new JSONObject(); 
     try { 
      jsonObject = new JSONObject(stringBuilder.toString()); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return jsonObject; 
    } 

    public static GeoPoint getGeoPoint(JSONObject jsonObject) { 

     Double lon = new Double(0); 
     Double lat = new Double(0); 

     try { 

      lon = ((JSONArray)jsonObject.get("results")).getJSONObject(0) 
       .getJSONObject("geometry").getJSONObject("location") 
       .getDouble("lng"); 

      lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0) 
       .getJSONObject("geometry").getJSONObject("location") 
       .getDouble("lat"); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6)); 

    } 


GeoPoint srcGeoPoint =getGeoPoint(getLocationInfo(fromAddress.replace("\n"," ").replace(" ", "%20"))); 
      GeoPoint destGeoPoint =getGeoPoint(getLocationInfo(CalDescription.toAddress.replace("\n"," ").replace(" ", "%20"))); 
+2

tiếc là giải pháp này không hoạt động với kết nối di động của một số nhà khai thác di động: yêu cầu luôn trả về ** OVER_QUERY_LIMIT **. Các nhà cung cấp dịch vụ di động đó sử dụng quá tải NAT, gán cùng một IP cho nhiều thiết bị ... – UmbySlipKnot

+0

thêm khóa api không bị lỗi, ví dụ: "http://maps.google.com/maps/api/geocode/json?address=address&ka&sensor = false & key = YOUR_API_KEY " –

Các vấn đề liên quan