Java 变量不工作

Java 变量不工作,java,android,local-variables,Java,Android,Local Variables,我对可变温度有问题。它总是返回0。 如果它在工作,就在里面 for (final Score score2 : scores) { scoretemp = score2.getResult(); } 但是当我试图在最后一行得到结果时 TV2.setText(""+scoretemp); 它总是毫无理由地为零 代码: BScore.setOnClickListener(新视图.OnClickListener(){ 双温; 公共void onClick(视图arg0){ BScore.set

我对可变温度有问题。它总是返回0。 如果它在工作,就在里面

for (final Score score2 : scores) {
  scoretemp = score2.getResult();
}
但是当我试图在最后一行得到结果时

TV2.setText(""+scoretemp);
它总是毫无理由地为零

代码:

BScore.setOnClickListener(新视图.OnClickListener(){
双温;
公共void onClick(视图arg0){
BScore.setVisibility(View.GONE);
sp.play(单击、1、1、0、0、1);
int scoreresult=总分;
final RequestControllerObserver observer2=新RequestControllerObserver(){
公共无效RequestControllerdReceiverResponse(最终RequestController RequestController){
//从我们的管理员那里得到分数
最终计分控制器计分控制器=(计分控制器)请求控制器;
最终列表分数=scoresController.getScores();
如果(分数!=null){
对于(最终分数2:分数){
scoretemp=score2.getResult();
}
//我们完了!
dismissDialog(对话框\进度);
}
}
公共无效RequestControllerdFail(最终RequestController为RequestController,最终异常为Exception){
dismissDialog(对话框\进度);
Toast.makeText(getApplicationContext(),“Toast.makeText()”、“Toast.makeText()”、“Toast.makeText()”、“Toast.makeText()”、“Toast;
}
};
//与我们的观察者一起设置计分员
ScoresController ScoresController 2=新的ScoresController(observer2);
showDialog(对话进度);
scoresController2.setMode(模式);
ScoresController 2.loadRangeForUser(Session.getCurrentSession().getUser());
TV2.setText(“+scoretemp”);

回调方法RequestControllerdReceiverResponse是异步调用的,因此在调用TV2.setText(“+scoretemp”);之后,可能会调用它


您可以从requestControllerdReceiverResponse方法中执行更新(在GUI线程上调用)或者在值发生更改时触发某种propertychangedevent,然后由GUI线程处理。

回调方法RequestControllerdIDReceiverResponse是异步调用的,因此可以并且可能会在调用TV2.setText(“+scoretemp”))后调用


您可以从requestControllerdReceiverResponse方法中执行更新(在GUI线程上调用)或者在值发生更改时触发某种propertychangedevent,然后由GUI线程处理。

变量不起作用,它们会发生变化!回调方法RequestControllerdIDReceiverResponse被称为异步,因此它可以并且可能会在TV2.setText(“+scoretemp”)之后调用;被调用。@RobeEleckers我认为这是问题所在。最后一行应该在侦听器内部,而不是外部。为什么是“final”。看起来奇怪,在for循环中使用“final”迭代器是没有意义的。final意味着变量一旦设置就不能更改变量变量不起作用,它们会变化!回调方法requestControllerDidReceiveResponse被称为异步,因此它可以而且可能会在TV2.setText(“+scoretemp”)之后被调用;被调用。@RobeEleckers我认为这是问题所在。最后一行应该在侦听器内部,而不是外部。为什么它是“final”。看起来奇怪,在for循环中有一个“final”迭代器是没有意义的。final意味着变量一旦设置就不能更改
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);