1

変数 scoretemp に問題があります。常に 0 を返します。内部の if 条件は機能しています。

for (final Score score2 : scores) {
  scoretemp = score2.getResult();
}

しかし、最後の行で結果を取得しようとすると。

TV2.setText(""+scoretemp);

理由もなく常にゼロです。

コード:

BScore.setOnClickListener(new View.OnClickListener() {

  double scoretemp;

  public void onClick(View arg0) {
    BScore.setVisibility(View.GONE);
    sp.play(click, 1, 1, 0  , 0, 1);
    int scoreresult = totalscore;
    final RequestControllerObserver observer2 = new RequestControllerObserver() {
      public void requestControllerDidReceiveResponse(final RequestController requestController) {
        // get the scores from our controller
        final ScoresController scoresController = (ScoresController) requestController;
        final List<Score> scores = scoresController.getScores();
        if(scores!=null){
          for (final Score score2 : scores) {
            scoretemp = score2.getResult();
          }
          // we're done!
          dismissDialog(DIALOG_PROGRESS);
        }
      }
    public void requestControllerDidFail(final RequestController aRequestController, final Exception anException) {
      dismissDialog(DIALOG_PROGRESS);
      Toast.makeText(getApplicationContext(), "لا يوجد إتصال بالأنترنت أو خطأ في إستقبال البيانات", Toast.LENGTH_LONG).show();
}
  };
// set up a ScoresController with our observer
ScoresController scoresController2 = new ScoresController(observer2);
showDialog(DIALOG_PROGRESS);
scoresController2.setMode(mode);
scoresController2.loadRangeForUser(Session.getCurrentSession().getUser());
TV2.setText(""+scoretemp);
4

1 に答える 1

1

コールバックメソッドrequestControllerDidReceiveResponseは非同期で呼び出されるため、TV2.setText( "" + scoretemp);の後に呼び出される可能性があります。と呼ばれます。

requestControllerDidReceiveResponseメソッド内から更新を実行する(GUIスレッドで呼び出す)か、値が変更されたときに何らかのpropertychangedeventを起動して、GUIスレッドで処理することができます。

于 2012-11-29T12:45:13.437 に答える