2013-07-20 45 views
0

我有一个“真或假”类型的测验在做。所以,两个按钮,一个是真实的,另一个是带有问题的textview。我有一个在Assets文件夹中导入的sqlite数据库。其中4列:_id,question,correctAnswer,wrongAnswer。每列INTEGER除TEXT之外的问题。因此,对于每个correctAnswer列,我设置0或1,具体取决于答案是true还是false。但是,在游戏中,无论什么问题,我在我的左侧TRUE按钮上出现错误,并在我右侧的FALSE按钮上纠正。我不知道我做错了什么。总之,这里的代码:从SQLite数据库整数的布尔值

public class Kviz extends Activity implements OnClickListener{ 

    Button true,false; 
    TextView question; 

    LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>(); 

    private String generateWhereClause(){ 
     StringBuilder result = new StringBuilder(); 
     for (Long l : mAnsweredQuestions){ 
      result.append(" AND _ID <> " + l); 
     } 
     return result.toString(); 
    } 

    private class Answer { 
     public Answer(int opt, boolean correct) { 
      option = opt; 
      isCorrect = correct; 
     } 

     int option; 
     boolean isCorrect; 
    } 

    Runnable mLaunchTask = new Runnable() { 
     public void run() { 
      nextQuestion(); 
     } 
    }; 

    Handler mHandler = new Handler(); 

    final OnClickListener clickListener = new OnClickListener() { 
     public void onClick(View v) { 
      Answer ans = (Answer) v.getTag(); 
      if (ans.isCorrect) { 
       Toast.makeText(getApplicationContext(), "Correct!", Toast.LENGTH_SHORT).show(); 
       mHandler.postDelayed(mLaunchTask,1200); 
      } 
      else{ 
       Toast.makeText(getApplicationContext(), "Incorrect!", Toast.LENGTH_SHORT).show(); 
       mHandler.postDelayed(mLaunchTask,1200); 
      } 
     } 
    }; 


    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.kviz); 

     inicijalizujVarijable(); 

     nextQuestion(); 
    } 

    private void nextQuestion() { 
     TestAdapter mDbHelper = new TestAdapter(this); 
     DataBaseHelper myDbHelper = new DataBaseHelper(this); 

     if(!myDbHelper.checkDataBase()){ 
     mDbHelper.createDatabase(); 
     } 
     try{ 

      mDbHelper.open(); 

      Cursor c = mDbHelper.getTestData(generateWhereClause()); 
      c.moveToFirst(); 

      mAnsweredQuestions.add(c.getLong(0)); 

      List<Answer> labels = new ArrayList<Answer>(); 

      if (c.getInt(2)==1){ 
     labels.add(new Answer(c.getInt(2), true)); 
     labels.add(new Answer(c.getInt(3), false)); 
     tacno.setTag(labels.get(0)); 
     netacno.setTag(labels.get(1)); 

     }else{ 
     labels.add(new Answer(c.getInt(2), false)); 
     labels.add(new Answer(c.getInt(3), true)); 
     netacno.setTag(labels.get(0)); 
     tacno.setTag(labels.get(1)); 
     } 

      true.setOnClickListener(clickListener); 
      false.setOnClickListener(clickListener); 
     } 

     finally{ 
      mDbHelper.close(); 
     } 

    } 

    private void inicijalizujVarijable() { 

     true = (Button) findViewById(R.id.bTacno); 
     false = (Button) findViewById(R.id.bNetacno); 
     question = (TextView) findViewById(R.id.tvPitanje); 

    } 

    public void onClick(View v) { 

    } 

} 
+0

为什么在数据库中有“正确答案”列和“错误答案”列?如果它们全部是真/假,那么只有2个可能的结果,他们得到它或者他们不这样,所以你可以使用1列。 – ObieMD5

+0

嗯,我想你是对的,但这仍然不能解决我的问题。 – marjanbaz

+0

我需要你澄清发生了什么,它没有多大意义。我知道你没有从按下答案按钮中得到想要的结果,但是发生的情况我不明白。 – ObieMD5

回答

1

我会作出一些假设,根据这个代码块:

if (c.getInt(2)==1){ 
    labels.add(new Answer(c.getInt(2), true)); 
    labels.add(new Answer(c.getInt(3), false)); 
    tacno.setTag(labels.get(0)); 
    netacno.setTag(labels.get(1)); 
} else { 
    labels.add(new Answer(c.getInt(2), false)); 
    labels.add(new Answer(c.getInt(3), true)); 
    netacno.setTag(labels.get(0)); 
    tacno.setTag(labels.get(1)); 
} 

c.getInt(2)==1是真的......

  • 你两个答案添加到labels,所以labels[0]=true,和labels[1]=false
  • 您设置了tacnotrue(索引0)和netacnofalse(索引1)

c.getInt(2)==1是假的......

  • 你加两个答案labels,所以labels[0]=falselabels[1]=true
  • 您设置netacnofalse(索引0)和tacnotrue(指数1 )

在这两种情况下,tacno为真(正确)和netacno是错误的(不正确)。你翻了两次。

0

我不是100%的清楚,但在我看来,当你回来到视图,被显示在屏幕上的任何老真/ FALS按钮,需要用数据库中的值更新,否则它们将在xml布局中显示为它们的默认设置。