![](/img/trans.png)
[英]How to access from “onCreate()” an Arraylist variable in another method of same class?
[英]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:
我找到了這個線程,並進行了相應的嘗試,但無濟於事。 仍然為零。
唯一的區別是,在鏈接中的問題中,類是靜態的。 當我將類設為靜態時,它說:此處不允許使用修飾符“靜態”。
我更新的代碼:
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.