2017-10-04 5 views
1

Je travaillais avec geocoder dans mon application android pour obtenir le nom du pays en utilisant la latitude et la longitude. J'ai trouvé que ça fonctionnait bien dans la version kitkat et ci-dessous. Mais quand j'ai testé mon application dans les versions ci-dessus, elle donnait null. Donc, ma question est simple: comment utiliser geocoder au-dessus des versions kitkat. S'il y a une autre meilleure option au lieu de geocoder alors s'il vous plaît me suggérer! Merci d'avance!Geocoder ne fonctionne pas en android dessus kitkat version

+0

avez-vous acquis l'autorisation d'exécution pour Api 22 ci-dessus ou plus? –

+0

Vérifiez les autorisations d'exécution et si le problème persiste, utilisez l'API de localisation Goole pour obtenir l'emplacement –

+0

Copie possible de [Le géocodeur ne fonctionne pas sur certains téléphones Android] (https://stackoverflow.com/questions/31146775/ geocoder-doesnt-work-on-some-of-the-android-phones) –

Répondre

0

Je poste mon code pour Geocoder. Suivez-le

//Keep this GeocodingLocation.java in a separate file. 

    public class GeocodingLocation { 

     private static final String TAG = "GeocodingLocation"; 
     public static void getAddressFromLocation(final String locationAddress, 
                final Context context, final Handler handler) { 
      Thread thread = new Thread() { 
       @Override 
       public void run() { 
        Geocoder geocoder = new Geocoder(context, Locale.getDefault()); 
        String result = null; 
        String latitude = null; 
        String longitude = null; 
        try { 
         List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1); 
         if (addressList != null && addressList.size() > 0) { 

          Log.e("GeocodingLocation --> getAddressFromLocation ==>" + 
            addressList.toString()); 

          Address address = (Address) addressList.get(0); 
          StringBuilder sb = new StringBuilder(); 
          latitude = String.valueOf(address.getLatitude()); 
          longitude = String.valueOf(address.getLongitude()); 

          Logger.infoLog("GeocodingLocation --> Lat & Lang ==>" + latitude +" "+longitude); 
          //sb.append(address.getLatitude()).append("\n"); 
          //sb.append(address.getLongitude()).append("\n"); 

         } 
        } catch (IOException e) { 
         Log.e(TAG, "Unable to connect to Geocoder", e); 
        } finally { 
         Message message = Message.obtain(); 
         message.setTarget(handler); 
         if (latitude != null && longitude != null) { 
          message.what = 1; 
          Bundle bundle = new Bundle(); 
          bundle.putString("latitude", latitude); 
          bundle.putString("longitude", longitude); 
          message.setData(bundle); 
         } else { 
          message.what = 1; 
          Bundle bundle = new Bundle(); 
          result = "Address: " + locationAddress + 
            "\n Unable to get Latitude and Longitude for this address location."; 
          bundle.putString("address", result); 
          message.setData(bundle); 
         } 
         message.sendToTarget(); 
        } 
       } 
      }; 
      thread.start(); 
     } 
    } 

appelez la classe de votre fragment.

private void getAddressLatitudeLongitude(String branchAddress) { 
     Log.e("getAddressLatitudeLongitude ==>" + branchAddress); 

     GeocodingLocation.getAddressFromLocation(branchAddress, thisActivity, new GeocoderHandler()); 
    } 

Gardez cette classe comme classe interne dans un même fragment

private class GeocoderHandler extends Handler { 
     @Override 
     public void handleMessage(Message message) { 
      switch (message.what) { 
       case 1: 
        try { 
         Bundle bundle = message.getData(); 
         latitude = bundle.getString("latitude"); 
         longitude = bundle.getString("longitude"); 

         Log.e("CreateBranch --> GeocoderHandler ==>" + latitude + " " + longitude); 
        }catch (Exception e){ 
         e.printStackTrace(); 
        } 
        break; 
       default: 
        latitude = null; 
        longitude = null; 
      } 
      latitudeList.add(latitude); 
      longitudeList.add(longitude); 

      if(latitude==null || longitude==null){ 
       showAlertDialog("Please enter correct address", Constants.APP_NAME); 
      } 

      Log.e("Latitude list =>" + latitudeList); 
      Log.e("Longitude list =>" + longitudeList); 
     } 
    } 

sortie sera obtenir la latitude et la longitude. J'espère que cette réponse aide.

+0

Je pense que vous n'avez pas eu ma question. Je ne demande pas d'obtenir la latitude et la longitude de l'adresse. Je demande d'obtenir l'adresse de localisation à partir de la latitude et de la longitude. –