簡體   English   中英

Android-從另一個類的oncreate()獲取變量

[英]Android - Get variable from oncreate() of another class

我有一個GetMyLocation類,它獲取用戶的當前位置。 現在,我試圖從另一個類ShowMap2調用該類的對象。 但是我無法將更新的位置發送給新班級。

我沒有在這里包括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;
    }

上面的代碼為lat和lon返回0.0。

我嘗試了所有可能想到的方法,但最終總是得到0.0。 我知道課程本身會得到當前的經緯度,但我無法正確通過它。 可以幫我一下嗎?

謝謝。

PS:

我找到了這個線程,並進行了相應的嘗試,但無濟於事。 仍然為零。

如何從Android onCreate方法訪問此變量?

唯一的區別是,在鏈接中的問題中,類是靜態的。 當我將類設為靜態時,它說:此處不允許使用修飾符“靜態”。

我更新的代碼:

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();

    }

編輯:更新的代碼,可以工作:

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);

您要在GetMyLocation擴展Activity 為了實現您想要的目標,請刪除extends Activity ,然后將代碼從onCreate()移至合適的構造函數,如GetMyLocation()

您的其余邏輯是可靠的。

活動是針對GUI的,如果您不打算在您的課程中打開新的活動,請不要擴展Activity 為了使代碼從onCreate()起作用,您必須創建類的意圖,然后啟動活動,這將打開一個空白活動,因為您沒有在GetMyLocation設置任何視圖。

用外行的話來說,永遠不會調用onCreate()因為您永遠不會開始活動。

編輯為了將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 當我們引用this從我們的類,它指向一個類,這恰好是一個Activity滿足我們GetMyLocation(Context context)的構造。 然后,您可以調用您的方法並獲得預期的結果。

當你最初叫getSystemService()你暗示this哪是你的活動的引用從未啟動過。 這就是為什么當您從GetMyLocation()刪除extends Activity GetMyLocation()時您的IDE會生氣的原因。 它不知道從哪里找了getSystemService()因為隱含的類this已經不再是一個Context

如果要將參數從“活動”傳遞到“活動”,請使用“捆綁銷售”。 如果要在Activity退出時獲得結果,請在創建新的Activity時使用startActivityForRestult。 如果僅要將參數從Activity傳遞到另一個類,請使用該類的構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM