することができますスコープの外にそれを使用することはできませんレシーバー内の最終的でない変数の外側で使用しないでください。単にスコープの問題を回避するために
迅速かつ汚いの変化は次のようになります。
final Long[] temp = {-1};
areaRequest.countByCurrentInstitution().fire(new Receiver<Long>() {
@Override
public void onSuccess(Long response) {
temp[0] = response;
}
});
doSomethingWith(temp[0]);
しかし、それはあなたが何をしたいのか、通常ではありません。 countByCurrentInstitution()
が非同期呼び出しであるため、doSomethingWith()
を呼び出した時点でtemp[0]
がまだ-1
になるため、asyncメソッドが別のスレッドで実行されているためです。
メインスレッドは単純なThread.sleep()
または(yikes!)非常に長いループを使用して少し待つことができますが、やはり速いハックとエラー(その呼び出しにそれより時間がかかりますか?
最良のオプションはLong temp
を捨て、ちょうどonSuccess()
メソッド内にコードを移動することです:
areaRequest.countByCurrentInstitution().fire(new Receiver<Long>() {
@Override
public void onSuccess(Long response) {
doSomethingWith(response);
}
});
私はあなたが必要以上に難しいと思っています。 Walenが最後にした答えを見てください。 – Knarf
その答えは機能しません。非同期応答から変数を保存することはできません。だから、これを行う方法は、最初に2番目の呼び出しに必要な変数を返す関数を呼び出すことです。私はもっと難しくはない、私の目の前では、これは最も単純な解決策だ –