問題を解決するためのアプローチは他にもあります:
- 最初にsql-statementを(制限なしで)実行し、質問に正しく答えられたらカーソルの次のエントリに移動します
- すでに回答済みの質問をバッファリングする
2番目のアプローチは次のように実行できます。
まず、where句を含めてメソッドとSQLを変更します:
public Cursor getTestData(String whereClause)
{;
try
{
String sql ="SELECT * FROM tblPitanja WHERE 1 = 1 " + whereClause + " ORDER BY RANDOM() LIMIT 1";
[...]
次に、ゲームクラスですでに回答済みの質問をバッファリングします。
LinkedListをゲームクラスに追加する
LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();
すでに回答済みの質問をLinkedListに追加します:
Cursor c = mDbHelper.getTestData(generateWhereClause());
mAnsweredQuestions.add(c.getLong(0));
List<Answer> labels = new ArrayList<Answer>();
[...]
where-clauseを生成する関数を追加します:
private String generateWhereClause(){
StringBuilder result = new StringBuilder();
for (Long l : mAnsweredQuestions){
result.append(" AND " + YOURID + " <> " + l);
}
return result.toString();
}