2012-05-03 7 views
0

私のアプリケーションオブジェクトに問題があります。私は現在電子ゲームボードからの着信データをシミュレートするサービスを使用しています。このデータは、2Dブール値配列として表されます。 5秒ごとに、サービスはアプリケーションオブジェクトのメソッドを使用して配列を更新します(setDetectionMap())。この配列は、別のメソッド(getDetectionMap())を使用してメインアクティビティのスレッドによって読み込まれています。いくつかのデバッグの後で、主なアクティビティが変更を見ていないことはほぼ肯定的です。ここに私のアプリケーションオブジェクトのためのコードされていますアプリケーションオブジェクトが共有されない

public class ChessApplication extends Application{ 

    private static ChessApplication singleton; 
    private boolean[][] detectionMap; 

    public static ChessApplication getInstance(){ 
     return singleton; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     singleton=this; 
     detectionMap=new boolean[8][8]; 
    } 

    public boolean[][] getDetectionMap(){ 
     return detectionMap; 
    } 
    public void setDetectionMap(boolean[][] newMap){ 
     detectionMap=newMap; 
     Log.d("Chess Application","Board Changed"); 
    } 
} 

私は私のマニフェストをチェックしましたが、私は12回を私のオブジェクトの宣言を書き換えてきた、私はときに私のコードが実行されていることを確認するために、LogCatタグを追加しましたそれがすべきだと思うし、私はおそらく冗長なシングルトンコードを実装しています。これを引き起こす可能性のあるアイデアは何ですか?ちなみに、誰も私のアクティビティの実行中に変数の状態を表示する方法を教えてもらえますか?前もって感謝します。

答えて

0

アップデートが発生した後、getDetectionMap()を呼び出して新しいマップを取得するアクティビティはありますか?

それ以外の場合は、古いブール型[] []配列への参照を保持しているため、setDataMap(...)は現在のデータ構造体を実際に更新していません。別のもの。そのため、メインアクティビティは、次にgetDetectionMapを呼び出すまでスワップアウトを認識しません。

簡単な修正:setDetectionMapでは、値をnewMapからdetectMapに手動でコピーします。または、アクティビティの参照を更新して、正しいマップを探します。元の質問に全く関係のない

もう一つの観察:それは、Android開発中のアプリケーションを上書きすることは非常に珍しい、とあなたはそうするため本当に正当な理由がない限り、通常は「コードのにおいを」と考えられています。この場合、私はそれがあなたのサービスとアクティビティとの間でやりとりできるようになると思いますが、あなたは完全に必要ではない中産者を作ります。 Here's a useful SO threadどのように直接2つの間で通信するには:

+0

返信ありがとうございます。だから、私は実際には、私のサービスでハードコーディングしている特定の値を返すまで.getDetectionMap()を待つwhileループを使用して、私の活動の更新をポーリングしていますが、それは書き込みが行われたことを決して確認しません。しかし、このwhileループを入力する前に、メインアクティビティで.setDetectionMap()を使用して値を設定すると、正常に動作します。だから、私のアプリケーションオブジェクトがシングルトンとして動作しているのではなく、私のアクティビティとサービスが両方ともオブジェクトの異なるインスタンスを実行しているように見えます。ありがとう。 – user1373705

+0

2つの異なるアプリケーションオブジェクトを実行している場合、私は驚くでしょう。ただし、予防策として、detectMapを静的に設定することもできます。問題が解決しない場合は、2つの異なるアプリケーションインスタンスであることがわかります。 –

+0

detectMapを静的に設定しようとしましたが、問題は解決しません。 LogCatタグを使用して、サービスとアクティビティが予想された時間に読み取り/書き込みを行っていることと、アプリケーションオブジェクトがこれらの呼び出しに応答していることを確認していますが、まだ2つは完全に認識していないようです。 – user1373705

関連する問題