我有一个测验应用程序,可以将分数保存在Firebase上。它正常工作。但是,每当我尝试重新参加测验时,它只会显示第一个活动,然后跳过其后的所有活动,并继续到显示输出的最后一个活动。我检查了所有内容,这些ID都是唯一的。我找不到哪里出了问题。
这是我测验的第一部分。当我重新参加测验时,分数将重置为0。它可以正常工作。但是,当我单击“下一步”时,它将直接转到显示输出的最终活动。
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_part1);
firebaseAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
phqChoice1 = (RadioButton) findViewById(R.id.phqChoice1);
phqChoice2 = (RadioButton) findViewById(R.id.phqChoice2);
phqChoice3 = (RadioButton) findViewById(R.id.phqChoice3);
phqChoice4 = (RadioButton) findViewById(R.id.phqChoice4);
btnNext = (Button) findViewById(R.id.btnNext);
getAnswer();
final DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");
if (myRef != null) {
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
HashMap<String, Object> result = new HashMap<>();
result.put("anx", 0);
result.put("dep", 0);
myRef.updateChildren(result);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getMessage());
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
UserHistory userHistory = new UserHistory();
userHistory.setAnx(anx);
userHistory.setDep(dep);
myRef.setValue(userHistory);
Intent myIntent = new Intent(Part1.this, Part2.class);
startActivity(myIntent);
finish();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
System.out.println("Entering data failed. " + databaseError.getMessage());
}
});
}
});
}}
private void getAnswer() {
radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.phqChoice2) {
dep++;
} else if (checkedId == R.id.phqChoice3) {
dep = dep + 2;
} else if (checkedId == R.id.phqChoice4) {
dep = dep + 3;
}
}
});}
这是第2部分活动,Android会跳过这些活动,如果我重新参加测验,将继续进行最后的活动。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_part2);
firebaseAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
btnNext = (Button)findViewById(R.id.btnPart2);
DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
UserHistory userHistory = dataSnapshot.getValue(UserHistory.class);
anxHistory = userHistory.getAnx();
depHistory = userHistory.getDep();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(Part2.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer();
anxValue = anxHistory + anx;
final DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
HashMap<String, Object> result = new HashMap<>();
result.put("anx", anxValue);
myRef.updateChildren(result);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getMessage());
}
});
Intent part3A = new Intent(Part2.this, Part3.class);
startActivity(part3A);
}
});
}
private void getAnswer() {
radioGroup2 = (RadioGroup) findViewById(R.id.radioGroup2);
int selectedItem = radioGroup2.getCheckedRadioButtonId();
if (selectedItem == R.id.part2Choice2) {
anx++ ;
} else if (selectedItem == R.id.part2Choice3) {
anx = anx + 2 ;
}
else if (selectedItem == R.id.part2Choice4) {
anx = anx + 3;
}else {
anx = 0;
}
}
}
我希望每当我再次参加测验时,输出都能像往常一样进行。所有活动均应照常进行,并且不应跳过任何活动。实际发生的是第一个活动正常运行,但是与测验有关的所有其他活动最终被跳过。请帮忙。我一无所知,我不知道该怎么办。
此外,如果单击单选按钮A(值为0),则该活动将照常继续。如果单击其他值大于0的按钮(值是1-3),则该活动将跳到显示输出的最后一个活动。
为简化起见:单击单选按钮A(0)>下一个活动,单击单选按钮A(0),>下一个活动(正常进行。)。或单击单选按钮B(1)>跳过其他活动,进入最后一个活动。
答案 0 :(得分:0)
尝试将Intent放在btnNext,onClickListener方法之外
lazy
答案 1 :(得分:0)
我将Intent活动放在ValueEventListener内,因此每当我尝试输入新数据时,它都会跳到Final活动。解决方法:
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
UserHistory userHistory = new UserHistory();
userHistory.setAnx(anx);
userHistory.setDep(dep);
myRef.setValue(userHistory);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
System.out.println("Entering data failed. " + databaseError.getMessage());
}
});
Intent myIntent = new Intent(Part1.this, Part2.class);
startActivity(myIntent);
finish();