2015-02-27 4 views
0

У меня есть класс GetMyLocation, который получает текущее местоположение пользователя. Теперь я пытаюсь вызвать объект этого класса из другого класса, ShowMap2. Но я не могу отправить обновленное местоположение в новый класс.Android - Получить переменную из oncreate() другого класса

Я не включил другие переопределения для GetMyLocation здесь.

Что у меня есть:

public class ShowMap2 extends Activity{ 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_showmap); 

     GetMyLocation myLocation = new GetMyLocation(); 


     myLat = myLocation.GetCurrentLat(); 
     myLon = myLocation.GetCurrentLon(); 

    } 

Это класс, который получает место:

public class GetMyLocation extends Activity implements LocationListener { 


    protected LocationManager locationManager; 
    protected LocationListener locationListener; 
    Location location; 

    public static double myLat, myLon; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

     location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); 


     this.myLat = location.getLatitude(); 
     this.myLon = location.getLongitude(); 

    } 


    public double GetCurrentLat(){ 
     return this.myLat; 
    } 

    public double GetCurrentLon(){ 
     return this.myLon; 
    } 

Приведенный выше код возвращает 0.0 как для широты и долготы.

Я пробовал все возможные способы, о которых я мог думать, но я всегда получаю 0.0. Я знаю, что сам класс получает мой текущий lat и lon, но я не могу передать его правильно. Может кто-нибудь, пожалуйста, помогите мне здесь?

Спасибо.

PS:

Я нашел эту нить, и попытался его соответствующим образом, но безрезультатно. Еще нули.

How to access this variable from an Android onCreate method?

Единственное различие в вопросе в ссылке, класс является статическим. Когда я ставил свой статический класс, он говорит: Модификатор «статический» здесь не разрешен.

Мой обновленный код:

public class GetMyLocation extends Activity implements LocationListener { 

    protected LocationManager locationManager; 
    protected LocationListener locationListener; 
    Location location; 

    static double myLat, myLon; 

    double GetCurrentLat(){ 
     return myLat; 
    } 

    double GetCurrentLon(){ 
     return myLon; 
    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

     location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); 

     this.myLat = location.getLongitude(); 
     this.myLon = location.getLongitude(); 

    } 

EDIT: Обновлен код, который работает:

public class GetMyLocation implements LocationListener { 
//public class GetMyLocation extends Activity implements LocationListener { 

    private static final LatLng HAMBURG = new LatLng(43.48484521,-80.5274279); 
    private GoogleMap map; 

    protected LocationManager locationManager; 
    protected LocationListener locationListener; 
    Location location; 

    private static double myLat, myLon; 

    GetMyLocation(Activity activity){ 

     locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

     location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); 

     this.myLat = location.getLatitude(); 
     this.myLon = location.getLongitude(); 

    } 

    double GetCurrentLat(){ 
     return this.myLat; 
    } 

    double GetCurrentLon(){ 
     return this.myLon; 
    } 

получения значений местоположение с помощью ShowMap2:

GetMyLocation myLocation = new GetMyLocation(this); 
+0

Вы отправили переменные с помощью намерения в secondActivity? – KOTIOS

+0

просто создает экземпляр класса GetMyLocation myLocation = new GetMyLocation(); 'не вызывает методы на нем' onCreate (Bundle savedInstanceState); ' Вам нужно узнать, как создать новую активность. –

ответ

0

Вы простирающуюся Activity в GetMyLocation. Для цели, которую вы хотите, удалите extends Activity и переместите код с onCreate() в подходящий конструктор, такой как GetMyLocation().

Остальная часть вашей логики прочная.

Активность для графического интерфейса пользователя, и если вы не собираетесь открывать новое мероприятие в своем классе, не расширяйте Activity. Чтобы код работал от onCreate(), вам нужно было бы создать намерение своего класса и начать действие, которое откроет пустое действие, потому что вы не устанавливаете какие-либо представления в GetMyLocation.

В условиях неспециалиста ваш onCreate() никогда не вызывается, потому что вы никогда не начинаете свою деятельность.

EDIT Чтобы передать Context в наш класс, так он работает правильно, мы определим наш конструктор так:

GetMyLocation(Context context) { 
    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

    location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); 

    this.myLat = location.getLatitude(); 
    this.myLon = location.getLongitude(); 

} 

И мы будем инициализировать наш класс так: GetMyLocation location = new GetMyLocation(this); из вашего Activity. Когда мы ссылаемся на 2 из нашего класса, он указывает на этот класс, который как раз так выглядит Activity, удовлетворяющий нашему конструктору GetMyLocation(Context context). Затем вы можете вызвать свои методы и получить ожидаемые результаты.

Когда вы изначально называли getSystemService(), вы подразумевали this, который был ссылкой на вашу деятельность, которая никогда не начиналась. Вот почему ваша IDE рассердилась на вас, когда вы удалили extends Activity с GetMyLocation(). Он не знал, где искать getSystemService(), потому что подразумеваемый класс this больше не был Context.

+0

Если я удалю расширение Activity, он не сможет решить getSystemService. Также я ранее перемещал код из onCreate() в конструктор. Но это заставит приложение закрыть/сбой, когда я его запустил. – fractal5

+0

Затем вы должны передать «Контекст» в качестве параметра в свой конструктор. Я добавлю фрагмент примера к моему ответу. – MeetTitan

+0

@ fractal5, взгляните на мое редактирование. – MeetTitan

-1

Если вы хотите передать параметры из Activity to Activity, используйте Bundle. Если вы хотите получить результат, когда активность завершена, используйте startActivityForRestult при создании нового действия. Если вы просто хотите передать параметры из Activity в другой класс, используйте конструктор класса.

Смежные вопросы