我正在尝试使用coins
从Firebase
获取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
}
答案 0 :(得分:0)
解决这个问题的常用方法是将变量放入长度为1的数组中,使数组最终并捕获数组。
final Integer[] have_coins= new Integer[]{0};
在onDataChange update coinss first index
have_coins[0] = Integer.parseInt(coinss) ;