I'm working on a Trivia game and i got a problem how not to repeat the questions from the db.. After all i done it in a very primitive way and it worked but at the third level it gets stuck and not working anymore..
package trivia.com.example.kids1.triviatest;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Play extends AppCompatActivity implements View.OnClickListener {
TextView text, tvLevel, tvScore;
Button answerOne, answerTwo, answerThree, answerFour;
private final String DB_NAME = "gameDatabase";
private final String TABLE_NAME = "gameTable";
SQLiteDatabase db = null;
int score = 0;
int position = 1;
String playerAnswer;
String correctAnswer;
List<Integer> usedQuestions = new ArrayList<Integer>();
String uq;
int UQ;
Random r = new Random();
int nextLv = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play);
text = (TextView)findViewById(R.id.textView);
initializeVars();
setOnClickListener();
try {
db = this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
String selectQuery = "SELECT Question, AnswerA, AnswerB, AnswerC, AnswerD, Level, CorrectAnswer, ID FROM " +
TABLE_NAME + " where ID == 1";
Cursor c = db.rawQuery(selectQuery, null);
if (c != null){
if (c.moveToFirst()) {
do {
text.setText(c.getString(c.getColumnIndex("Question")));
answerOne.setText(c.getString(c.getColumnIndex("AnswerA")));
answerTwo.setText(c.getString(c.getColumnIndex("AnswerB")));
answerThree.setText(c.getString(c.getColumnIndex("AnswerC")));
answerFour.setText(c.getString(c.getColumnIndex("AnswerD")));
correctAnswer = c.getString(c.getColumnIndex("CorrectAnswer"));
tvLevel.setText("Level 1 - " + position);
uq = c.getString(c.getColumnIndex("ID"));
UQ = Integer.parseInt(uq);
usedQuestions.add(UQ);
}while(c.moveToNext());
}
} else {
text.setText("Looking for question...");
}
db.close();
} catch (SQLiteException se){
Log.e(getClass().getSimpleName(), "Couldn't find the question.");
}
}
public void initializeVars(){
answerOne = (Button)findViewById(R.id.answerOne);
answerTwo = (Button)findViewById(R.id.answerTwo);
answerThree = (Button)findViewById(R.id.answerThree);
answerFour = (Button)findViewById(R.id.answerFour);
tvLevel = (TextView)findViewById(R.id.tvLevel);
tvScore = (TextView)findViewById(R.id.tvScore);
}
public void setOnClickListener(){
answerOne.setOnClickListener(this);
answerTwo.setOnClickListener(this);
answerThree.setOnClickListener(this);
answerFour.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.answerOne:
playerAnswer = "A";
answerCheck();
break;
case R.id.answerTwo:
playerAnswer = "B";
answerCheck();
break;
case R.id.answerThree:
playerAnswer = "C";
answerCheck();
break;
case R.id.answerFour:
playerAnswer = "D";
answerCheck();
break;
}
}
public void answerCheck(){
if (playerAnswer.equals(correctAnswer)){
Toast.makeText(this,"Right Answer",Toast.LENGTH_LONG).show();
position++;
score += 100;
nextQuestion();
} else {
Toast.makeText(this, "Wrong Answer",Toast.LENGTH_LONG).show();
}
}
public void nextQuestion(){
do {
nextLv = (r.nextInt(4)+1);
if (usedQuestions.size() == 1){
if (nextLv != usedQuestions.get(0)){
break;
}
} else if (usedQuestions.size() == 2){
if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1)){
break;
}
} else if (usedQuestions.size() == 3){
if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) && nextLv != usedQuestions.get(2)){
break;
}
} else if (usedQuestions.size() == 4){
if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) && nextLv != usedQuestions.get(2) && nextLv != usedQuestions.get(3)){
break;
}
} else if (usedQuestions.size() == 5){
if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) &&
nextLv != usedQuestions.get(2) && nextLv != usedQuestions.get(3) && nextLv != usedQuestions.get(4)){
break;
}
} else if (usedQuestions.size() == 6){
if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) && nextLv != usedQuestions.get(2) &&
nextLv != usedQuestions.get(3) && nextLv != usedQuestions.get(4) && nextLv != usedQuestions.get(5)){
break;
}
}
} while (true);
try{
db = this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
String selectQuery = "SELECT Question, AnswerA, AnswerB, AnswerC, AnswerD, Level, CorrectAnswer, ID FROM " +
TABLE_NAME + " where ID == " + nextLv;
Cursor c = db.rawQuery(selectQuery, null);
if (c != null) {
if (c.moveToFirst()) {
do {
text.setText(c.getString(c.getColumnIndex("Question")));
answerOne.setText(c.getString(c.getColumnIndex("AnswerA")));
answerTwo.setText(c.getString(c.getColumnIndex("AnswerB")));
answerThree.setText(c.getString(c.getColumnIndex("AnswerC")));
answerFour.setText(c.getString(c.getColumnIndex("AnswerD")));
correctAnswer = c.getString(c.getColumnIndex("CorrectAnswer"));
tvLevel.setText("Level 1 - " + position);
tvScore.setText("Score: " + score);
uq = c.getString(c.getColumnIndex("ID"));
UQ = Integer.parseInt(uq);
usedQuestions.add(UQ);
}while (c.moveToNext());
}
}
} catch (SQLiteException se){
Log.e(getClass().getSimpleName(), "Could not level up :(");
}
}
}
Any help please?
Aucun commentaire:
Enregistrer un commentaire