Google Geocoder service无效-google Geocoder 无法获得地址.

文章标签: android
2015-1-18 11:51:09     人阅读    

通过 google Geocoder 在google地图界面中获得 地址,但是无效,并报错  "Couldnt get address":

public String GetAddress(String lat, String lon)
 
        {
 
            Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
 
            String ret = "";
 
            try {
 
                List<Address> addresses = geocoder.getFromLocation(Double.parseDouble(lat), Double.parseDouble(lon), 1);
 
                if(addresses != null) {
 
                    Address returnedAddress = addresses.get(0);
 
                    StringBuilder strReturnedAddress = new StringBuilder("");
 
                    for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
 
                        strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
 
                    }
 
                    ret = strReturnedAddress.toString();
 
                    ret=ret.substring(0, ret.length() - 1);
 
                }
 
                else{
 
                    ret = "Unknown Address";
 
                }
 
            }
 
            catch (IOException e) {
 
                // TODO Auto-generated catch block
 
                e.printStackTrace();
 
                ret = "Couldn't get Address";
 
            }
 
            return ret;
 
        }


LogCat:

09-27 23:47:49.837: W/System.err(1862): java.io.IOException: Service not Available
09-27 23:47:49.847: W/System.err(1862):     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
09-27 23:47:49.847: W/System.err(1862):     at com.example.free.Add.GetAddress(Add.java:634)
09-27 23:47:49.857: W/System.err(1862):     at com.example.free.Add$LoadAddress.doInBackground(Add.java:608)
09-27 23:47:49.857: W/System.err(1862):     at com.example.free.Add$LoadAddress.doInBackground(Add.java:1)
09-27 23:47:49.857: W/System.err(1862):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-27 23:47:49.857: W/System.err(1862):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-27 23:47:49.857: W/System.err(1862):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-27 23:47:49.857: W/System.err(1862):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-27 23:47:49.857: W/System.err(1862):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-27 23:47:49.857: W/System.err(1862):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-27 23:47:49.857: W/System.err(1862):     at java.lang.Thread.run(Thread.java:856)

处理方法

普通的解决方法是要重启你的设备.
但是你不能要求你的用户重启设备,所以我的解决方法是 使用 HTTP 回调,下面是 我以前在项目中使用的AsyncTask代码


你需要修改这个代码来解决你项目中出现的问题

private class GetAddressPositionTask extends
 
        AsyncTask<String, Integer, LatLng> {



    @Override
 
    protected void onPreExecute() {
 
        super.onPreExecute();
 
    }



    @Override
 
    protected LatLng doInBackground(String... plookupString) {



        String lookupString = plookupString[0];
 
        final String lookupStringUriencoded = Uri.encode(lookupString);
 
        LatLng position = null;



        // best effort zoom
 
        try {
 
            if (geocoder != null) {
 
                List<Address> addresses = geocoder.getFromLocationName(
 
                        lookupString, 1);
 
                if (addresses != null && !addresses.isEmpty()) {
 
                    Address first_address = addresses.get(0);
 
                    position = new LatLng(first_address.getLatitude(),
 
                            first_address.getLongitude());
 
                }
 
            } else {
 
                Log.e(TAG, "geocoder was null, is the module loaded? "
 
                        + isLoaded);
 
            }



        } catch (IOException e) {
 
            Log.e(TAG, "geocoder 失败, 使用HTTP");
 
        }
 
        //  使用 HTTP查询调用地图api
        if (position == null) {
 
            HttpGet httpGet = new HttpGet(
 
                    "http://maps.google.com/maps/api/geocode/json?address="
 
                            + lookupStringUriencoded + "&sensor=true");
 
            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 {
 
                // Log.d("MAPSAPI", stringBuilder.toString());



                jsonObject = new JSONObject(stringBuilder.toString());
 
                if (jsonObject.getString("status").equals("OK")) {
 
                    jsonObject = jsonObject.getJSONArray("results")
 
                            .getJSONObject(0);
 
                    jsonObject = jsonObject.getJSONObject("geometry");
 
                    jsonObject = jsonObject.getJSONObject("location");
 
                    String lat = jsonObject.getString("lat");
 
                    String lng = jsonObject.getString("lng");



                    // Log.d("MAPSAPI", "latlng " + lat + ", "
 
                    // + lng);



                    position = new LatLng(Double.valueOf(lat),
 
                            Double.valueOf(lng));
 
                }



            } catch (JSONException e) {
 
                Log.e(TAG, e.getMessage(), e);
 
            }



        }
 
        return position;
 
    }



    @Override
 
    protected void onPostExecute(LatLng result) {
 
        super.onPostExecute(result);
 
    }



}
};


原文地址:http://www.itmmd.com/201501/514.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android jdbc连接 sqlserver 不通过 webservice   上一篇
下一篇  android相机旋转180度,相机界面颠倒
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!