私のアプリには2つのアクティビティ、CreateOrderActivity
とPaymentResultActivity
があります。サードパーティの支払いアプリを使用して支払いが完了します。Ottoイベントを処理中にProgressDialog.showがスタックしました
CreateOrderActivity -> 3rd-party payment app -> PaymentResultActivity
そして、私は戻ってCreateOrderActivity
に結果を送りたいので、私はオットーを使用します。ここでは
CreateOrderActivity -> 3rd-party payment app -> PaymentResultActivity
^ |
|-------------------- Otto <----------------------
コードです:私はアプリを実行すると
// PaymentResultActivity
bus.post(new PaymentFinishedEvent(resultCode));
finish();
// CreateOrderActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
...
bus.register(this);
}
@Subscribe
public void onPaymentFinished(PaymentFinishedEvent event) {
checkPaymentResult(event.resultCode);
}
private void checkPaymentResult(int resultCode) {
Log.i("checkPaymentResult", "1");
Request request = buildCheckingPaymenResultRequest();
Log.i("checkPaymentResult", "2");
final ProgressDialog progressDialog = ProgressDialog.show(this, "", "Checking...", true);
Log.i("checkPaymentResult", "3");
request.execute(new Listener() { ... });
}
と支払いが完了し、PaymentResultActivity
が解雇され、イベントがバスに掲示され、方法checkPaymentResult
が実行されます。成功しました。しかし、私はのに新しい注文を入れて支払いを終えると、そのイベントもポストされますが、アプリはちょうど立ち往生し、結果をチェックしません。
私はアプリがスタックしているステップれる見つけるために上記のコードにデバッグログの3行を追加し、それが1
と2
は、Androidモニタで印刷されますが、3
が印刷されることはありません、そのことを示していますProgressDialog.show
が正常に実行できなかったことを意味し、プログラムがそこに停滞していることを意味します。なぜコードが2回目の試行で失敗するのか理解できません。
ところで、PaymentResultActivity
の起動モードは、サードパーティアプリケーションで必要とされるsingleTop
です。