2015-12-15 7 views
0

Я использую API Google Maps Android API GeoCoder Класс для извлечения координат определенного свойства из строки адреса, которую я им даю. Но приложение Android не может найти Lat-Long свойства. Теперь, когда я передаю то же самое String в https://www.google.com/maps/, он может легко найти местоположение на крыше объекта. Он также работает в мобильном браузере.API Карт Google v2 не удается найти Адресное местоположение

Так что же происходит? Почему Google Maps не может найти свойство в моем приложении? Вот мой код ниже:

LatLng propertyLocation = null; 
    try { 
     propertyLocation = getLocationFromAddress("Property Address"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    MarkerOptions mOptions = new MarkerOptions(); 
    mOptions.position(propertyLocation).title("Property Location").snippet(propertyAddress) 
      .draggable(true); 

    propertyMarker = googleMap.addMarker(mOptions); 
    propertyMarker.showInfoWindow(); 

    googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(propertyLocation, 15), 3000, 
      null); 
    googleMap.setMyLocationEnabled(true); 

А вот мой getLocationFromAddress(); Метод:

private LatLng getLocationFromAddress(String subjectPropertyAddress) throws IOException { 
    Log.i("Subject Property", subjectPropertyAddress); 
    if (Geocoder.isPresent()) { 
     Geocoder addressCoder = new Geocoder(LocationActivity.this); 
     List<Address> addresses = addressCoder.getFromLocationName(subjectPropertyAddress, 2); 
     if (addresses == null || addresses.isEmpty()) { 
      Log.i("Addresses", "Could not locate address:"); 
      return null; 
     } else { 
      Address location = addresses.get(0); 
      return new LatLng(location.getLatitude(), location.getLongitude()); 
     } 
    } else { 
     Log.i("Geo-Coder", "Not Present"); 
    } 
    return null; 
} 

ответ

0

Пробовали ли вы его с классом Asyntask? Может быть, этот код может помочь вам

private class GeocodeTask extends AsyncTask<String, Void, List<Address>> { 
    @Override 
    protected List<Address> doInBackground(String... locationName) { 
     Geocoder geocoder = new Geocoder(ctx); 
     List<Address> addresses = null; 
     try { 
      // Getting a maximum of 3 Address that matches the input text 
      addresses = geocoder.getFromLocationName(locationName[0], 3); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return addresses; 
    } 

    @Override 
    protected void onPostExecute(List<Address> addresses) { 
     if(addresses==null || addresses.size()==0){ 
      Toast.makeText(getActivity(), "No Location found", Toast.LENGTH_SHORT).show(); 
     }else { 
      googleMap.clear(); 

      for(int i=0 ; i < addresses.size(); i++){ 
       Address address = (Address) addresses.get(i); 
       latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
       googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 13f)); 
       googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));    
      } 
     } 
    } 
} 

И поиск местонахождение:

new GeocodeTask().execute("Property Address"); 
+0

Эй, я пытался ваше решение, но это не сработало. Может быть, это проблема с GeoCoder? – SynerFlow

+0

Какую карту вы используете в xml-макете? Это: «com.google.android.gms.maps.MapFragment» –

+0

Danh DC, да, это 'com.google.android.gms.maps.MapFragment'. – SynerFlow