2013-02-28 43 views
1

我正在使用Android中的反向地理編碼。我的代碼一直工作到昨天,但現在它停止在我的Android設備上工作(samsung S2)。但它在模擬器中起作用。當我在設備上編譯時,它在logcat中顯示以下錯誤:反向地理編碼停止在Android地圖版本v1中工作

02-28 12:56:22.800: W/System.err(9048): java.io.IOException: Service not Available 
02-28 12:56:22.815: W/System.err(9048):  at android.location.Geocoder.getFromLocation(Geocoder.java:136) 
02-28 12:56:22.815: W/System.err(9048):  at in.wptrafficanalyzer.locationreversegeocoding.MainActivity$ReverseGeocodingTask.doInBackground(MainActivity.java:154) 
02-28 12:56:22.830: W/System.err(9048):  at in.wptrafficanalyzer.locationreversegeocoding.MainActivity$ReverseGeocodingTask.doInBackground(MainActivity.java:1) 
02-28 12:56:22.830: W/System.err(9048):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
02-28 12:56:22.830: W/System.err(9048):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
02-28 12:56:22.835: W/System.err(9048):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
02-28 12:56:22.835: W/System.err(9048):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
02-28 12:56:22.835: W/System.err(9048):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
02-28 12:56:22.845: W/System.err(9048):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
02-28 12:56:22.845: W/System.err(9048):  at java.lang.Thread.run(Thread.java:856) 

回答

3

這是一個已知問題。可能的解決方法是您必須重新啓動設備。我被告知我再次工作。

+0

not working.actually它正在成功工作,直到yesterday.is在我的Android設備中的任何其他設置,以啓用此?.in模擬器它工作正常,實際上真正的問題是什麼? – jithu 2013-02-28 07:43:23

+1

這是問題... http://code.google.com/p/android/issues/detail?id=38009 – Bevor 2013-02-28 08:04:27

+0

這是爲什麼起作用?你如何與你的應用用戶進行交流?當然,我不能告訴所有用戶在我的應用程序的最新更新後重新啓動他們的設備?這可能是不好的做法... – marienke 2015-02-23 10:12:02

3

這是由多種原因引起的。我有一些設備總是這樣做,而其他設備的相同代碼運行良好。

一個很好的解決方法是捕獲IOException並且發射google maps web api;

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) { 
     e.printStackTrace(); 
    } 

    return jsonObject; 
} 

您可以像這樣提取返回的值;

 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"); 
1

它正在工作...........使用這個技巧。

只需編輯project.properties

# Project target 
target=Google Inc.:Google APIs:16 

的原因是,該地址解析器類是存在於核心Android框架,而是取決於代碼貢獻的谷歌API的正常工作。即使您的AVD包含Google API,您的項目仍需要針對特定​​的構建目標進行構建。

+1

不幸的是,這似乎沒有幫助。 – mike47 2013-07-01 05:03:15

+0

也幫不了我! – Prachi 2013-09-19 06:39:55