Java 无法从onaddvalueeventlistner访问我的变量

Java 无法从onaddvalueeventlistner访问我的变量,java,android,Java,Android,我正在尝试使用addValueEventListener从Firebase获取硬币的价值 在得到它之后,我想更新它并将它再次保存在同一个节点中 在Firebase中计算它 我必须从addValueEventListener中取出它,但每当我检查该函数的值时,它输出0,当我检查另一个函数的值时,它输出正确的值 如何将其从函数中取出 这是我的密码: 公共类结果扩展了AppCompatActivity{ 私有文本视图mresult; 个人智力得分; 私营机构; 私人按钮重启; 私人Firebase m

我正在尝试使用
addValueEventListener
Firebase
获取
硬币的价值

在得到它之后,我想更新它并将它再次保存在同一个节点中 在
Firebase
中计算它

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

如何将其从函数中取出

这是我的密码:

公共类结果扩展了AppCompatActivity{
私有文本视图mresult;
个人智力得分;
私营机构;
私人按钮重启;
私人Firebase mrootref、当前用户、硬币;
私人消防队;
私人int币,div,mul;
公共货币包括硬币、最终硬币;
公共字符串当前用户id、最终用户、用户;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u结果);
mresult=(TextView)findViewById(R.id.result);
mAuth=FirebaseAuth.getInstance();
当前用户id=mAuth.getCurrentUser().getUid();
mrootref=新的火力基地(“https://onemorestep-ca70a.firebaseio.com/users");
当前用户\u ref=新Firebase(mrootref+“/”+当前用户\u id+“/”;
//////取硬币
Firebase coinsref=新Firebase(“https://onemorestep-ca70a.firebaseio.com/users/“+当前用户id+”/coins”);
coinsref.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
coins=dataSnapshot.getValue(String.class);
have_coins=Integer.parseInt(coins);
}
@凌驾
取消后的公共无效(FirebaseError FirebaseError){
}
});
Toast.makeText(Results.this、String.valueOf(have_coins)、Toast.LENGTH_LONG.show();
串新的_串;
score=getIntent().getIntExtra(“score”,0);
新字符串=字符串.valueOf(分数);
mlimit=Integer.parseInt(getIntent().getExtras().get(“limit”).toString());
重启=(按钮)findViewById(R.id.btnrestart);
mresult.setText(“测验结束,您的分数为“+score+”,共“+mlimit*10”);
mresult.setVisibility(View.VISIBLE);
////计算应该加多少硬币
硬币=(分数/10);
如果(分数=30){//if用户
最终硬币=拥有硬币+硬币;
final_coins=String.valueOf(final_coinsit);
当前用户参考子系统(“硬币”)。设定值(最终硬币);
}
//Toast.makeText(Results.this,final_coins,Toast.LENGTH_LONG).show();
restart.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(Results.this、com.NTSPreparationabc.onemorestep.Account.class);
intent.addFlags(intent.FLAG_活动_清除_任务| intent.FLAG_活动_新任务);
星触觉(意向);
}
});
}
//塞特
}

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

final Integer[] have_coins= new Integer[]{0};
在onDataChange中,更新第一个索引

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