2013-07-20 2 views
0

"진짜 또는 잘못된"유형의 퀴즈가 있습니다. 따라서 두 개의 버튼, 하나는 거짓, 하나는 질문에 대한 텍스트 뷰입니다. 자산 폴더에 sqlite 데이터베이스를 가져 왔습니다. 4 열 : _id, question, correctAnswer, wrongAnswer. 모든 열은 INTEGER를 제외하고는 TEXT입니다. 따라서 모든 correctAnswer 열에 대해 응답이 참인지 거짓인지에 따라 0 또는 1을 설정합니다. 그러나 게임에서 질문이 무엇이든간에 나는 왼쪽의 TRUE 버튼에 잘못 표시되고 오른쪽 FALSE 버튼은 맞습니다. 내가 뭘 잘못하고 있는지 모르겠다. 어쨌든, 여기에 코드입니다 : 나는 100 % 명확하지 않다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

왜 데이터베이스에'정답'열과'오답'열이 있습니까? 그들이 모두 true/false 인 경우 가능한 결과가 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이 참 ...

  • 당신은 너무, labelslabels[0]=true 두 답변을 추가, 및 labels[1]=false
  • tacno ~ true (인덱스 0) 및 netacno ~ false (인덱스 1)

c.getInt(2)==1이 거짓 ...

  • 당신은 너무 labels[0]=false, labels 두 답변을 추가하고, labels[1]=true
  • 당신은 설정 netacnofalse에 (인덱스 0)과 tacnotrue에 (인덱스 1)

두 경우 모두 tacno이 true (정확함)이고 netacno이 거짓 (올바르지 않음)입니다. 플립을 두 번 했어.

0

,하지만 당신이보기에 돌아올 때 나에게 보인다, 화면에 표시되는 오래된 참/FALS 버튼, 필요 데이터베이스의 값으로 업데이트됩니다. 그렇지 않으면 XML 레이아웃의 기본 설정으로 표시됩니다.