2012-02-28 56 views
0

現狀檢索是這樣的:問題是使用另一個類

  1. 活動A從B類

B類句柄獲取GPS位置調用getLocation()方法。

2活動A應完成一旦B類已完成檢索GPS 的位置。

活性A調用類似:

B.getLocation() 
this.finish() 

即得到使用從B法的位置,然後完成自身。實際上,A在B有機會獲得位置之前關閉。

我該如何正確構造這個以便A等到B完成?

+0

嘗試像位置= B.getLocation();然後方法返回位置檢查,如果位置不爲空,則調用this.finish(); – 2012-02-28 14:38:44

+0

@Samir這也行不通。出於某種原因,它會將該位置置於後臺。無論如何繼續執行進一步的代碼。即B.getLocation();然後檢查位置是否爲空。如果它是空的,它會繼續進行,它不會進行檢查。 – Neeta 2012-02-28 14:43:38

+0

告訴我你想要什麼?我認爲你的方法是錯誤的,並創建prblm你能告訴我你想要什麼嗎? – 2012-02-28 14:45:25

回答

1

這裏的設計缺乏。事實上,你不能只爲另一個調用一個Activity的方法,因爲目前只有一個Activity可以在前臺。你的活動應該使用Intents進行溝通。下面是它如何工作:

  1. Activity A使用Intent
  2. Activity B獲得位置開始Activity B並將其返回到Activity A,用setResult()方法
  3. Activity AActivity B讀取結果在其onActivityResult()方法
  4. Activity A完成

這感覺就像是一個更好的實現。實際上,如果Activity B確實獲取了位置,則可以簡單地將其實施爲Service並將其綁定到Activity A。希望這可以幫助。

+0

對不起,我是班。我編輯了我的問題。 – Neeta 2012-02-28 14:47:13

+0

但是,這似乎是一個更好的實現/設計,謝謝。 – Neeta 2012-02-28 14:48:01

+0

@Neeta,無論如何,獲取用戶的位置是一個長時間運行的操作,所以如果你同時調用它,你有冒險獲得ANR。因此,您應該將B類實現爲單獨的線程或服務,並在獲取位置時回調到活動A. – Egor 2012-02-28 14:50:58

0

確定你需要做一些回調機制,如果你熟悉基本的Java ..在這裏,我只是想給你回調的Java的概述...

//Here is you class B : 

class ClassB { 

interface ILocationListerner { 


void setLocations(float lat, float long); 


} 



ILocationListerner mLocationListener = null; 


/// Here is your static method that set Listerner and call by Activity A 

public void static setLocationListerner(ILocationListerner listener){ 

this.mLocationListener = listener; 


} 


//Gel loaction method. 

public static void getLocation(){ 

//// 
... 
//// 

mLocationListener.setLocation(lat,lng); 





} 


}// ClassB ends here 


/// Activity A 

class ActivityA extends Activity { 


onCreate(){ 


ClassB.setLocationListerner(new ILocationListerner { 

     @Override 
     void setLocations(float lat, float long){ 

     /// do your stuff and call finish(); 

     } 

}); 

ClassB.getLocation(); 


} 

} 

} 

希望你明白這一點...