2012-02-28 14 views
0

状況は、この別のクラスを使用して取得された後Acitivityを閉じる:問題GPS位置を

  1. アクティビティAは、呼び出しクラスB

クラスBからgetLocation()方法は、GPS位置を取得する処理します。

2クラスBがGPSの取得を完了したら、アクティビティAは終了する必要があります 場所。

B.getLocation() 
this.finish() 

即ちBからの方法を使用して位置を取得し、自身を終了:

アクティビティAのようなものを呼び出します。実際には、Bは場所を取得する機会がある前にAが終了します。

Bが完了するまでAが待機するように正しく構成するにはどうすればよいですか?

+0

try like location = B.getLocation();メソッドが返された位置locationがnullでないかどうかをチェックし、this.finish()を呼び出します。 –

+0

@Samirそれはうまくいきません。何らかの理由で、バックグラウンドで場所を取得します。それに関係なく、さらにコードを実行し続けます。すなわちB.getLocation(); locationがnullかどうかを確認します。もしそれがnullならば、それはとにかく続行し、検査を続行しません。 – Neeta

+0

あなたは何をしたいですか?私はあなたのアプローチが間違っていると思うし、prblmを作成するあなたが実際に何をしたいのか教えてくれますか? –

答えて

1

こちらのデザインは欠けています。実際には、Activityのメソッドをもう1つのメソッドに呼び出すことはできません。ただ1つのActivityしか現時点でフォアグラウンドになることはできません。あなたの活動はIntentsを使用して通信する必要があります。ここではそれが動作するはず方法は次のとおりです。

  1. Activity AIntent
  2. Activity Bは場所を取得使用してActivity Bを開始し、そのonActivityResult()方法で
  3. Activity AActivity Bからの結果を読み込みsetResult()方法を使用して、Activity Aに返し
  4. Activity A仕上げ

これはより良い実装のように感じます。実際にActivity Bが場所を取得するだけの場合は、Serviceとして簡単に実装してActivity Aにバインドすることができます。お役に立てれば。

+0

申し訳ありませんが私はクラスを意味しました。私は私の質問を編集しました。 – Neeta

+0

しかし、それはより良い実装/デザインのように思えます、ありがとうございます。 – Neeta

+0

@Neeta、とにかく、ユーザーの場所を取得する作業は長時間実行されるため、同期して呼び出すと、ANRを取得する危険性があります。したがって、クラスBを別のスレッドまたはサービスとして実装し、場所取得時にアクティビティAにコールバックする必要があります。 – Egor

0

あなたは基本的な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(); 


} 

} 

} 

は、あなたがこれを理解してほしい...ここで私はあなたにJavaでコールバックの概要を提供しようとしています..いくつかのコールバックメカニズムを行う必要がありますOK ...