Java 一次在SQLite数据库中输入2条相同的记录-Android

Java 一次在SQLite数据库中输入2条相同的记录-Android,java,android,sqlite,countdown,Java,Android,Sqlite,Countdown,每个琐事游戏结束后,将显示结果页面。大约20秒后,即在您的时间用完并进入下一个问题之前,每个问题在游戏中为您提供的时间,然后重新加载结果页面。然后,当您进入高分页面时,分数已输入两次。因此,下面我的问题视图类中出现了一些问题,但我找不到错误 如果需要任何进一步的信息,请告诉我。提前谢谢你 Results.java total_score = dh.calculateTotalScore(score, percentage); if(dh.getLowest() == -1) {

每个琐事游戏结束后,将显示
结果
页面。大约20秒后,即在您的时间用完并进入下一个问题之前,每个问题在游戏中为您提供的时间,然后重新加载
结果
页面。然后,当您进入
高分
页面时,分数已输入两次。因此,下面我的
问题视图
类中出现了一些问题,但我找不到错误

如果需要任何进一步的信息,请告诉我。提前谢谢你

Results.java

    total_score = dh.calculateTotalScore(score, percentage);
    if(dh.getLowest() == -1) {
        dh.insert(score, percentage, total_score, category);
    } else {
        dh.delete(dh.getLowest());
        dh.insert(score, percentage, total_score, category);
    }
DatabaseHelper.java

public long insert(long score, int percentage, long total_score, String category) {
    ContentValues values = new ContentValues();
    values.put(SCORE, score);
    values.put(PERCENTAGE, percentage);
    values.put(TOTAL_SCORE, total_score);
    values.put(CATEGORY, category);

    return db.insert(TABLE, null, values);
}

public void delete(long lowScore) {
    lowScore = getLowest();
    db.delete(TABLE, TOTAL_SCORE + "=" + lowScore, null);
}

public long getLowest() {
    Cursor c = db.rawQuery("SELECT * FROM " + TABLE + " ORDER BY " + TOTAL_SCORE, null);
    long count = c.getCount();
    long lowScore = -1;
    if(count == 10) {
        c.moveToLast();
        lowScore = c.getInt(c.getColumnIndex(TOTAL_SCORE));
    }
    return lowScore;
}

public long calculateTotalScore(long score, int percentage) {
    long i;
    return i = (percentage * 1000) + score;
}
QuestionView.java

public class QuestionView extends Activity  {

    int correctAnswers = 0;
    int wrongAnswers = 0;
    int answer = 0;
    int i = 0;

    long score = 0;

    long startTime = 20000;
    long interval = 1000;
    long points;

    boolean timerHasStarted = false;

    String category;

    Button answer1, answer2, answer3, answer4;
    TextView question, pointCounter, questionNumber, timeCounter;

    ArrayList<Question> queries;
    Timer cdTimer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.questionviewmain);

        answer1 = (Button)findViewById(R.id.answer1);
        answer2 = (Button)findViewById(R.id.answer2);
        answer3 = (Button)findViewById(R.id.answer3);
        answer4 = (Button)findViewById(R.id.answer4);

        question = (TextView)findViewById(R.id.question);

        category = getIntent().getStringExtra("category");
        queries = getIntent().getParcelableArrayListExtra("queries");

        pointCounter = (TextView)findViewById(R.id.timer);
        questionNumber = (TextView)findViewById(R.id.timeElapsedView);
        timeCounter = (TextView)findViewById(R.id.timeCounter);

        cdTimer = new Timer(startTime, interval);

        loadQuestion();
    }

    public void loadQuestion() {

        if(i == 10) {

            endQuiz();

        } else {

            if(!timerHasStarted) {
                cdTimer.start();
                timerHasStarted = true;
            } else {
                cdTimer.start();
                timerHasStarted = false;
            }

            answer = queries.get(i).getCorrectAnswer();

            question.setText(queries.get(i).getQuery());

            answer1.setText(queries.get(i).getA1());
            answer2.setText(queries.get(i).getA2());
            answer3.setText(queries.get(i).getA3());
            answer4.setText(queries.get(i).getA4());

            answer1.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(0);
                    if(answer == 0) {
                        correctAnswers++;
                        nextQuestion();
                    } else {
                        wrongAnswers++;
                        nextQuestion();
                    }
                }
            });

            answer2.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(1);
                    if(answer == 1) {
                        correctAnswers++;
                        nextQuestion();
                    } else {
                        wrongAnswers++;
                        nextQuestion();
                    }
                }
            });

            answer3.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(2);
                    if(answer == 2) {
                        correctAnswers++;
                        nextQuestion();
                    } else {
                        wrongAnswers++;
                        nextQuestion();
                    }
                }
            });

            answer4.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(3);
                    if(answer == 3) {
                        correctAnswers++;
                        nextQuestion();
                    } else {
                        wrongAnswers++;
                        nextQuestion();
                    }
                }
            });
        } 
    }

    public ArrayList<Question> getQueries() {
        return queries;
    }

    public void nextQuestion() {
        score = score + points;
        i++;
        loadQuestion();
    }

    public class Timer extends CountDownTimer {

        public Timer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {
            if(i >= 9) {
                cdTimer.cancel();
                endQuiz();
            } else {
                wrongAnswers++;
                nextQuestion();
            }
        }

        @Override
        public void onTick(long millisUntilFinished) {
            timeCounter.setText("Time remaining: " + (millisUntilFinished / 100));
            points = (millisUntilFinished / 100) / 2;
            pointCounter.setText("Points remaining: " + points);
            if(i < 10) {
                questionNumber.setText("Question " + (i + 1) + " of 10");
            }
        }
    }

    public void endQuiz() {
        Intent intent = new Intent(QuestionView.this, Results.class);
        intent.putExtra("correctAnswers", correctAnswers);
        intent.putExtra("wrongAnswers", wrongAnswers);
        intent.putExtra("score", score);
        intent.putParcelableArrayListExtra("queries", queries);
        intent.putExtra("category", category);
        startActivity(intent);
    }
}
…对此:

if(i == 10) {
        endQuiz();
    }
if(i == 10) {
        cdTimer.cancel();
        endQuiz();
    }**

可能会调用两次
endquick
。只有当你在计时器启动前回答最后一个问题时

因为,我没有看到你在回答最后一个问题时取消计时器。因此,即使您已经回答了,计时器仍在滴答作响,当它启动时,它将调用
endquick


如果您没有回答最后一个问题并让时间用完,那么结果将只插入一次,因为计时器只会调用一次
endquick

如果您的数据库有问题,显示数据库代码可能会有所帮助。你在哪里插入/查询分数?我为你添加了更多代码,Geobits。感谢你的评论!检查门柱是否有正确的工作代码。