在安卓上保存ArrayList数据

huangapple 未分类评论48阅读模式
英文:

Saving ArrayList Data on Android

问题

private TextView countLabel;
private ImageView questionImage;
private EditText editText;

private String rightAnswer;
private int rightAnswerCount = 0;
private int quizCount = 1;

ArrayList<ArrayList<String>> quizArray = new ArrayList<>();

String quizData[][] = {
    {"image_circle", "circle"},
    {"image_triangle", "triangle"},
    {"image_square", "square"},
    {"image_pentagon", "pentagon"},
    {"image_hexagon", "hexagon"},
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    countLabel = findViewById(R.id.countLabel);
    questionImage = findViewById(R.id.questionImage);
    editText = findViewById(R.id.editText);

    editText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
            if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    checkAnswer();
                }
            }
            return false;
        }
    });

    // Create quizArray from quizData.
    for (int i = 0; i < quizData.length; i++) {
        ArrayList<String> tmpArray = new ArrayList<>();
        tmpArray.add(quizData[i][0]); // Image Name
        tmpArray.add(quizData[i][1]); // Right Answer
        quizArray.add(tmpArray);
    }

    showNextQuiz();
}

public void showNextQuiz() {
    countLabel.setText("Q" + quizCount);
    Random random = new Random();
    int randomNum = random.nextInt(quizArray.size());
    ArrayList<String> quiz = quizArray.get(randomNum);
    questionImage.setImageResource(
            getResources().getIdentifier(quiz.get(0), "drawable", getPackageName()));
    rightAnswer = quiz.get(1);
    quizArray.remove(randomNum);
}

public void checkAnswer() {
    String answer = editText.getText().toString().toLowerCase();
    String alertTitle;
    if (answer.equals(rightAnswer)) {
        alertTitle = "Correct!";
        rightAnswerCount++;
    } else {
        alertTitle = "Wrong...";
    }
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(alertTitle);
    builder.setMessage("Answer: " + rightAnswer);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            editText.setText("");
            if (quizArray.size() < 1) {
                showResult();
            } else {
                quizCount++;
                showNextQuiz();
            }
        }
    });
    builder.setCancelable(false);
    builder.show();
}

public void showResult() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Result");
    builder.setMessage(rightAnswerCount + " / 5");
    builder.setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            recreate();
        }
    });
    builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            finish();
        }
    });
    builder.show();
}
英文:

How can I return to the last question asked in the following code when the application is closed and opened.
I tried to save the arraylist with gson but it does not happen, adding a button also gives an error.
Thanks to you all for your help now.
arraylist got to save with sharedpreferences
because i think sharedpreferences easy than sqlite or another ways

private TextView countLabel;
private ImageView questionImage;
private EditText editText;

private String rightAnswer;
private int rightAnswerCount = 0;
private int quizCount = 1;

ArrayList&lt;ArrayList&lt;String&gt;&gt; quizArray = new ArrayList&lt;&gt;();

String quizData[][] = {
        // {&quot;Image Name&quot;, &quot;Right Answer&quot;}
        {&quot;image_circle&quot;, &quot;circle&quot;},
        {&quot;image_triangle&quot;, &quot;triangle&quot;},
        {&quot;image_square&quot;, &quot;square&quot;},
        {&quot;image_pentagon&quot;, &quot;pentagon&quot;},
        {&quot;image_hexagon&quot;, &quot;hexagon&quot;},
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    countLabel = findViewById(R.id.countLabel);
    questionImage = findViewById(R.id.questionImage);
    editText = findViewById(R.id.editText);

    editText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {

            if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {

                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    checkAnswer();
                }

            }

            return false;
        }
    });

    // Create quizArray from quizData.
    for (int i = 0; i &lt; quizData.length; i++) {

        // Prepare array.
        ArrayList&lt;String&gt; tmpArray = new ArrayList&lt;&gt;();
        tmpArray.add(quizData[i][0]); // Image Name
        tmpArray.add(quizData[i][1]); // Right Answer

        // Add tmpArray to quizArray.
        quizArray.add(tmpArray);

    }

    showNextQuiz();
}

public void showNextQuiz() {

    // Update quizCountLabel.
    countLabel.setText(&quot;Q&quot; + quizCount);

    // Generate random number between 0 and 4 (quizArray&#39;s size -1)
    Random random = new Random();
    int randomNum = random.nextInt(quizArray.size());

    // Pick one quiz set.
    ArrayList&lt;String&gt; quiz = quizArray.get(randomNum);

    // Set image and right answer.
    // Array format: {&quot;Image Name&quot;, &quot;Right Answer&quot;}
    questionImage.setImageResource(
            getResources().getIdentifier(quiz.get(0), &quot;drawable&quot;, getPackageName()));
    rightAnswer = quiz.get(1);

    // Remove this quiz from quizArray.
    quizArray.remove(randomNum);
}


public void checkAnswer() {

    // Get editText.
    String answer = editText.getText().toString().toLowerCase();

    String alertTitle;

    if (answer.equals(rightAnswer)) {
        // Correct!
        alertTitle = &quot;Correct!&quot;;
        rightAnswerCount++;
    } else {
        // Wrong...
        alertTitle = &quot;Wrong...&quot;;
    }

    // Create Dialog.
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(alertTitle);
    builder.setMessage(&quot;Answer : &quot; + rightAnswer);
    builder.setPositiveButton(&quot;OK&quot;, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            editText.setText(&quot;&quot;);

            if (quizArray.size() &lt; 1) {
                // quizArray is empty.
                showResult();

            } else {
                quizCount++;
                showNextQuiz();
            }

        }
    });
    builder.setCancelable(false);
    builder.show();
}

public void showResult() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(&quot;Result&quot;);
    builder.setMessage(rightAnswerCount + &quot; / 5&quot;);
    builder.setPositiveButton(&quot;Try Again&quot;, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            recreate();
        }
    });
    builder.setNegativeButton(&quot;Quit&quot;, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            finish();
        }
    });
    builder.show();
}

}

Thanks to you all for your help now.

huangapple
  • 本文由 发表于 2020年4月6日 22:08:46
  • 转载请务必保留本文链接:https://java.coder-hub.com/61061735.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定