この問題の可能な解決策の倍数があります。最もエレガントな方法は、上記のCountDownLatchと同じです。また、
// Populate and create children structure of the calling object
// When done, signal to callee that we have finished creating children
childrenReady.countDown(); // This will release the calling thread into the while loop
あなたがそうでなければ、UIスレッドアプリケーションからgetChildrenCount()
を呼び出していないことを確認してください:
SalesRequest.execute方法で
// Lock to signal Children are created
CountDownLatch childrenReady = new CountDownLatch(1/*wait for one signal*/);
public int getChildrenCount(int groupPosition) {
if(children == null){
SalesRequest request = new SalesRequest(childrenReady /*pass on this lock to worker thread*/);
request().execute(); // runs in other thread which
// initialises children with some value.
childrenReady.await(); // Wait until salesRequest finishes
while(children == null){
// I'm doin this to avoid null pointer Exception.
// So it comes out of the loop only when childern
// gets initialised.
}
}
return children.length;
}
、あなたは以下を持つことができます:ここで あなたが進む可能性がどのようですあなたがサーバーから答えを得るまで応答が失われます。
下の有権者もコメントを追加することができます。私は明確ではない場合、私は質問を変更することができます。私はいくつかの助けを求めています.. – ngesh
私はdownvoterではありませんが、上記のコードを達成する? – zengr
@ zengr ..その実際のアンドロイドコード..私は、サーバーの応答に基づいてUIを更新する必要があります。私はその方法から、その背中の背中をコントロールしていません。だから私はいくつかの変数を初期化するためにオーバーライドしました。 – ngesh