无法从onaddvalueeventlistner访问我的变量

时间:2018-04-18 11:58:43

标签: java android

我正在尝试使用coinsFirebase获取addValueEventListener的价值。

获取后,我想更新它并将其再次保存在同一节点中 在Firebase计算它。

我必须从addValueEventListener中取出它,但每当我检查该函数的值时,它输出0,当我检查另一个函数的值时,它输出正确的值。

如何将其从功能中删除?

这是我的代码:

public class Results extends AppCompatActivity {

private TextView mresult;

private int score;
private int mlimit;
private Button restart;
private Firebase mrootref,current_user_ref,coins_ref;
private FirebaseAuth mAuth;
private int coins,div,mul;
public int have_coins,final_coinsint;
public String current_user_id,final_coinss,coinss;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_results);
    mresult=(TextView) findViewById(R.id.result);
    mAuth=FirebaseAuth.getInstance();
    current_user_id=mAuth.getCurrentUser().getUid();

    mrootref=new Firebase("https://onemorestep-ca70a.firebaseio.com/users");
    current_user_ref=new Firebase(mrootref+"/"+current_user_id+"/");

    //////fetch coins
    Firebase coinsref = new Firebase("https://onemorestep-ca70a.firebaseio.com/users/" +current_user_id+ "/coins");
    coinsref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
             coinss=dataSnapshot.getValue(String.class);
            have_coins=Integer.parseInt(coinss);

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

    Toast.makeText(Results.this,String.valueOf(have_coins),Toast.LENGTH_LONG).show();
    String new_string;
    score=getIntent().getIntExtra("score",0);
    new_string=String.valueOf(score);
    mlimit=Integer.parseInt(getIntent().getExtras().get("limit").toString());
    restart=(Button) findViewById(R.id.btnrestart);
    mresult.setText("Quiz is finished and your score is "+score+" out of "+mlimit*10);
    mresult.setVisibility(View.VISIBLE);

//        //calculate how many coins should add
   coins=(score/10);


    if (score<30){//if user fails
        final_coinsint=have_coins-10;
        final_coinss=String.valueOf(final_coinsint);
        current_user_ref.child("coins").setValue(final_coinss);

    }
    else if (score>=30){//if user paased
        final_coinsint=have_coins+coins;
        final_coinss=String.valueOf(final_coinsint);



        current_user_ref.child("coins").setValue(final_coinss);
    }
   //Toast.makeText(Results.this,final_coinss,Toast.LENGTH_LONG).show();

    restart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Results.this, com.NTSPreparationabc.onemorestep.Account.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    });
}

//setter
}

1 个答案:

答案 0 :(得分:0)

解决这个问题的常用方法是将变量放入长度为1的数组中,使数组最终并捕获数组。

final Integer[] have_coins= new Integer[]{0};

在onDataChange update coinss first index

have_coins[0] = Integer.parseInt(coinss) ;