geocoder.getFromLocationName returns only null

前端 未结 4 1456
长发绾君心
长发绾君心 2020-12-01 20:01

I am going out of my mind for the last two days with an IllegalArgumentException error I receive in Android code when trying to get a coordinates out of an addr

相关标签:
4条回答
  • 2020-12-01 20:08

    I had a similar problem and found that polling the Geocoder until i got a result worked. Here is how i did it, so far works great.

    try {
        List<Address> geoResults = geocoder.getFromLocationName("<address goes here>", 1);
        while (geoResults.size()==0) {
            geoResults = geocoder.getFromLocationName("<address goes here>", 1);
        }
        if (geoResults.size()>0) {
            Address addr = geoResults.get(0);
            myLocation.setLatitude(addr.getLatitude());
            myLocation.setLongitude(addr.getLongitude());
        }
    } catch (Exception e) {
        System.out.print(e.getMessage());
    }
    
    0 讨论(0)
  • 2020-12-01 20:11

    Had the same problem. Pooling didn't work so I used this to get the location: Geocoding Responses

    Use this class to get JSONObject of location:

    public class GetLocationDownloadTask extends AsyncTask<String, Void, String> {
    
        @Override
        protected String doInBackground(String... strings) {
    
    
            String result = "";
            URL url;
            HttpURLConnection urlConnection;
            try {
                url = new URL(strings[0]);
                urlConnection = (HttpURLConnection) url.openConnection();
                InputStream is = urlConnection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(is);
    
                int data = inputStreamReader.read();
                while(data != -1){
                    char curr = (char) data;
                    result += curr;
                    data = inputStreamReader.read();
                }
                return result;
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
    
            if(result != null) {
                try {
                    JSONObject locationObject = new JSONObject(result);
                    JSONObject locationGeo = locationObject.getJSONArray("results").getJSONObject(0).getJSONObject("geometry").getJSONObject("location");
    
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
        }
    

    You can create and run the class instance like this:

    String link = "https://maps.googleapis.com/maps/api/geocode/json?address=" + addressString + "&key={YOUR_API_KEY}";
    
    GetLocationDownloadTask getLocation = new GetLocationDownloadTask();
    
    getLocation.execute(link);
    
    0 讨论(0)
  • 2020-12-01 20:25
    public LatLng determineLatLngFromAddress(Context appContext, String strAddress) {
            LatLng latLng = null;
            Geocoder geocoder = new Geocoder(appContext, Locale.getDefault());
            List<Address> geoResults = null;
    
            try {
                geoResults = geocoder.getFromLocationName(strAddress, 1);
                while (geoResults.size()==0) {
                    geoResults = geocoder.getFromLocationName(strAddress, 1);
                }
                if (geoResults.size()>0) {
                    Address addr = geoResults.get(0);
                    latLng = new LatLng(addr.getLatitude(),addr.getLongitude());
                }
            } catch (Exception e) {
                System.out.print(e.getMessage());
            }
    
        return latLng; //LatLng value of address
        }
    
    0 讨论(0)
  • 2020-12-01 20:30

    Run your code on Android 2.0, It will work. I had the same problem with may code. Its not working in 2.2, don't know why

    0 讨论(0)
提交回复
热议问题