2016-08-19 20 views
0

静的な文字列をこのデリゲートに渡すときにこの問題が発生しました。静的な文字列の値を通常の文字列にコピーしようとしました。NullReferenceException外部コードXamarin-Android

((JsonHttpClient)connection).RequestFilter = httpReq => 
{ 
    string authtoken = MemoryCache.authToken; 
    httpReq.Headers.Add(UdareConstants.AuthTokenKey, authtoken); 
}; 

また、値をハードコーディングすると問題はありません。

((JsonHttpClient)connection).RequestFilter = httpReq => 
{ 
    string authtoken = "62bebc52-fde3-4f47-beab-6a3e4e3440f0"; 
    httpReq.Headers.Add(UdareConstants.AuthTokenKey, authtoken); 
}; 

MemoryCacheそれは静的なクラスだとauthTokenプロパティは、それは静的な文字列です。

これは私を狂ってしまう。

The call stack from the exception

Console output after app crashes

+0

どのようにMemoryCache.authTokenを初期化しますか?コード開始時の –

+0

MemoryCache.authToken = "62bebc52-fde3-4f47-beab-6a3e4e3440f0"; – Loucry

+0

データブレークポイントを追加して、そのバグを調べることができます。これは興味深いかもしれません:http://stackoverflow.com/questions/4086039/data-breakpoints-in-java-eclipse –

答えて

0

私は年齢のため、Javaでコーディングしていないと私はXamarinを使用したことがないが、あなたはJavaのメモリモデルに関連するいくつかのものに実行している場合があります。言う

Java documentation

  • スレッド内の各アクションが発生し、前のプログラムのために、後に来る、そのスレッド内のすべてのアクション。

  • 同じモニターのその後のロック(同期ブロックまたはメソッド入力)のたびに、ロック解除(同期ブロックまたはメソッドの終了)が発生します。また、発生前の関係は推移的であるため、ロックを解除する前のスレッドのすべてのアクションが発生します。

  • 揮発性フィールドへの書き込みは、同じフィールドの後続のすべての読み取りの前に行われます。揮発性フィールドの書き込みと読み出しには、モニタの入力と終了と同様のメモリ一貫性効果がありますが、相互排他ロックは必要ありません。

  • スレッドで開始する呼び出しは、開始されたスレッドのすべての操作の前に発生します。

  • スレッド内のすべてのアクションは、他のスレッドがそのスレッドの結合から正常に戻る前に実行されます。

あなたは別のオプションは、あなたがstatic field initialization orderで問題に遭遇したことがあるNathan Hughes' answer on SO.

でそれについてもう少しを読むことができます。

BTW:静的変数は、通常、悪い考えです。

関連する問題