0

I followed an example from Android Geocoding to Get Latitude Longitude for an Address tutorial, it worked but I want to fetch the longitude and latitude coordinates separately but could not.

Here is my code:

public class MainActivity extends AppCompatActivity {
    Button addressButton;
    TextView addressTV;
    TextView latLongTV;
    static TextView txtLatitude;
    TextView txtLongitude;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        addressTV = (TextView) findViewById(R.id.addressTV);
        latLongTV = (TextView) findViewById(R.id.latLongTV);
     txtLatitude = (TextView) findViewById(R.id.txtLatitude);
       txtLatitude= (TextView) findViewById(R.id.txtLongitude);

        addressButton = (Button) findViewById(R.id.addressButton);
        addressButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                EditText editText = (EditText) findViewById(R.id.addressET);
                String address = editText.getText().toString();

                GeocodingLocation locationAddress = new GeocodingLocation();
                locationAddress.getAddressFromLocation(address,
                        getApplicationContext(), new GeocoderHandler());
            }
        });

    }

    private class GeocoderHandler extends Handler {
        @Override
        public void handleMessage(Message message) {
            String locationAddress,latitude ,longitude ;

            switch (message.what) {
                case 1:
                    Bundle bundle = message.getData();
                    locationAddress = bundle.getString("address");
                    latitude = bundle.getString("latitude");
                    longitude = bundle.getString("longitude");
                    break;
                default:
                    locationAddress = null;
                    latitude = null;
                    longitude= null;
            }
            latLongTV.setText(locationAddress);
          txtLatitude.setText(latitude);
//        txtLongitude.setText(longitude);
        }
    }

    private static class GeocodingLocation {


            private static final String TAG = "GeocodingLocation";

            public 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 strLatitude = null, strLongitude = null;
                        try {
                            List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1);
                            if (addressList != null && addressList.size() > 0) {
                                Address address = addressList.get(0);
                                double latitude = address.getLatitude();
                                double longitude = address.getLongitude();
                                StringBuilder sb = new StringBuilder();
                                sb.append(address.getLatitude()).append("\n");
                                sb.append(address.getLongitude()).append("\n");
                                result = sb.toString();
                               strLatitude = String.valueOf(latitude);
                               strLongitude= String.valueOf(longitude);
                            }
                        } catch (IOException e) {
                            Log.e(TAG, "Unable to connect to Geocoder", e);
                        } finally {
                            Message message = Message.obtain();
                            message.setTarget(handler);
                            if (result != null) {
                                message.what = 1;
                                Bundle bundle = new Bundle();
                                result = "Address: " + locationAddress +
                                        "\n\nLatitude and Longitude :\n" + result;
                                bundle.putString("address", result);
                                bundle.putString("Latitude", strLatitude);
                                bundle.putString("Longitude", strLongitude);
                                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();
            }
        }
halfer
  • 19,824
  • 17
  • 99
  • 186
LaideLawal
  • 77
  • 1
  • 10
  • 1
    How exactly does it not work? Is it crashing, and if so, where? Are you getting invalid values, zero values, or no values at all? Please give us a hint where to look. – Ken Y-N May 23 '17 at 07:12

1 Answers1

2

According to this answer, bundle keys are case-sensitive. You set the strings with:

bundle.putString("Latitude", strLatitude);
bundle.putString("Longitude", strLongitude);

But then get them with:

latitude = bundle.getString("latitude");
longitude = bundle.getString("longitude");

Notice you put with a capital L, but get with a lower-case l.

Ken Y-N
  • 14,644
  • 21
  • 71
  • 114