2013-07-20 46 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佈局中顯示爲它們的默認設置。