私はArrayList
その値をgridlayoutsオプションに入れなければならないクラスを使用して作業していました。初回OnCreate
は問題setText
なく動作し、場所を修正しましたが、クラスを呼び出した後、2回目クラッシュしました。同じコードが1回動作し、次回クラッシュする方法(エラーは最後の行にあると思います:->バッククラスから参照)
public class playGame extends Fragment {
View view;
Button option1Button,option2Button,option3Button,option4Button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle bundle) {
view=inflater.inflate(R.layout.fragment_play_game, container, false);
option1Button=view.findViewById(R.id.option1);
option2Button=view.findViewById(R.id.option2);
option3Button=view.findViewById(R.id.option3);
option4Button=view.findViewById(R.id.option4);
String gameName=getArguments().getString("Name");
TextView levelNameTextView=view.findViewById(R.id.levelNameTextView);
levelNameTextView.setText(gameName);
Button playAgainButton=view.findViewById(R.id.gameOverTry);
playAgainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(view).navigate(R.id.action_playGame_to_gameOver);
}
});
final ProcessGame processGame=new ProcessGame();
GetAndPutData();
option1Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option1Button.getText().toString());
}
});
option2Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option2Button.getText().toString());
}
});
option3Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option3Button.getText().toString());
}
});
option4Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processGame.compareWithCorrect(option4Button.getText().toString());
}
});
return view;
}
public class ProcessGame{
String question,option1,option2,option3,option4,correctAnswer;
TextView questionBox=view.findViewById(R.id.questionBox);
List<String> questionlist=new ArrayList<String>();
public void setValues(String question,String option1,String option2,String option3,String option4,String correctAnswer){
this.option1=option1;
this.option2=option2;
this.option3=option3;
this.option4=option4;
this.question=question;
this.correctAnswer=correctAnswer;
questionlist.add(0,option1);
questionlist.add(1,option2);
questionlist.add(2,option3);
questionlist.add(3,option4);
shuffleOption();
questionBox.setText(question);
}
public void shuffleOption(){
Collections.shuffle(questionlist);
putOptionsInButton();
}
public void putOptionsInButton(){
option1Button.setText(questionlist.get(0));
option2Button.setText(questionlist.get(1));
option3Button.setText(questionlist.get(2));
option4Button.setText(questionlist.get(3));
}
public void compareWithCorrect(String pressedButtonValue){
TextView feedbackBox=view.findViewById(R.id.feedbackBox);
if (pressedButtonValue==correctAnswer){
feedbackBox.setText("Correct :-)");
GetAndPutData();
}
else{
feedbackBox.setText("Wrong :-(");
shuffleOption();
}
}
}
public void GetAndPutData(){
ProcessGame processGame=new ProcessGame();
processGame.setValues("1+1=?","2","1","3","4","2");
}
}
これが私のエラーです:->
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.quiz_createandplay.playGame$ProcessGame.putOptionsInButton(playGame.java:117)
at com.example.quiz_createandplay.playGame$ProcessGame.shuffleOption(playGame.java:113)
答えが正しければ、設定値を呼び出すgetAndPutData()を呼び出し、そのアプリは正常に動作します。しかし、答えが間違っている場合は、nullリストを表示するputOptionsInButton()を呼び出すshuffleOption()に送信します。 、たとえば、shuffleOption()内でsetValues()を呼び出した場合、クラッシュが発生しないなど、答えが間違っていても、DATAをリストに設定する必要があります。
public void shuffleOption(){
Collections.shuffle(questionlist);
processGame.setValues("1+1=?","2","1","3","4","2");
putOptionsInButton();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加