Emre Ozdemir
Emre Ozdemir

Reputation: 122

I Couldn't Reach Change Location Value in Android

I'm sorry for mine simple question but I'm newbie this topic. I have Location Class for Android and I reach mine location with Toast Message but I couldn't reach mine location value other class. For example;

My Location Class

import android.app.AlertDialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class MyLocation{
    private LocationManager locationManager;
    LocationListener locationListener;
    private Context ourContext;

    public MyLocation(Context context){

        this.ourContext = context;

        locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if(!gps){
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 100, locationListener);
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("GPS Disabled");
            alertDialog.setMessage("You can enable GPS for settings");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();     
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 100, locationListener);
        }

    }

    public class MyLocationListener implements LocationListener{

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            Bundle bundle = new Bundle();

            lat = location.getLatitude();
            lon = location.getLongitude();
            Toast.makeText(ourContext, lat +" ve "+ lon, Toast.LENGTH_LONG).show();

            bundle.putString("lat", lat.toString());
            bundle.putString("lon", lon.toString());
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        public String getLat(){
            return lat.toString();
        }

        public String getLon(){
            return lon.toString();
        }

        private Double lat;
        private Double lon;
    }

And I call the

MyLocation myLocation = new MyLocation(getActivity());
Runnable runnable = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while(bundle.getString("lon") != null){
                    tv1.setText("Lon : " + bundle.getString("lon"));
                    tv2.setText("Lat : " + bundle.getString("lat"));
                }

            }
        };

        new Thread(runnable).start();

But every time my bundle return to null value. What can i do ?

Upvotes: 2

Views: 172

Answers (2)

Alexis C.
Alexis C.

Reputation: 93842

Because you construct a new Bundle so it can retrieve the datas you saved in your activity.

You can implement the following :

public class MyLocationListener implements LocationListener{

   Bundle bundle = new Bundle();

   public Bundle getBundle(){
        return bundle;
   }

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub

            lat = location.getLatitude();
            lon = location.getLongitude();
            Toast.makeText(ourContext, lat +" ve "+ lon, Toast.LENGTH_LONG).show();

            bundle.putString("lat", lat.toString());
            bundle.putString("lon", lon.toString());
        }
      //other method

}

public class MyLocation{
    private LocationManager locationManager;
    LocationListener locationListener;
    private Context ourContext;

    public MyLocation(Context context){

        this.ourContext = context;

        locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if(!gps){
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 100, locationListener);
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("GPS Disabled");
            alertDialog.setMessage("You can enable GPS for settings");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();     
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 100, locationListener);
        }

public Bundle getBundle(){
  if(locationListener != null)
      return locationListener.getBundle();
   else 
       return null;
}
    }

Then just do :

    Bundle bundle = myLocation.getBundle();
    if(bundle != null){
        tv1.setText("Lon : " + bundle.getString("lon"));
        tv2.setText("Lat : " + bundle.getString("lat"));
}

EDIT :

Change private LocationListener locationListener;

with private MyLocationListener locationListener;

Upvotes: 3

Emre Ozdemir
Emre Ozdemir

Reputation: 122

All of my code;

http://p1305.hizliresim.com/19/h/n2zwm.png

Thank you for your help

package com.example.postproject;

import android.app.AlertDialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class MyLocation{
    private LocationManager locationManager;
    private LocationListener locationListener;
    private Context ourContext;

    public MyLocation(Context context){

        this.ourContext = context;

        locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if(!gps){
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 100, locationListener);
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("GPS Disabled");
            alertDialog.setMessage("You can enable GPS for settings");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();     
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 100, locationListener);
        }
    }

    public Bundle getBundle(){
        if(locationListener != null)
            return locationListener.getBundle();
        else
            return null;
    }

    public class MyLocationListener implements LocationListener{
        Bundle bundle = new Bundle();

        public Bundle getBundle(){
            return bundle;
        }

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            lat = location.getLatitude();
            lon = location.getLongitude();
            Toast.makeText(ourContext, lat +" ve "+ lon, Toast.LENGTH_LONG).show();
            bundle.putString("lat", lat.toString());
            bundle.putString("lon", lon.toString());
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        public String getLat(){
            return lat.toString();
        }

        public String getLon(){
            return lon.toString();
        }

        private Double lat;
        private Double lon;

    }


}

And I use

MyLocation myLocation = new MyLocation(getActivity());

        Bundle bundle = myLocation.getBund();
        tv1.setText("Lon : " + bundle.getString("lon"));
        tv2.setText("Lat : " + bundle.getString("lat"));

Upvotes: 1

Related Questions