2016-02-18 42 views
0

我使用的是code,但我想讓每個問題有4個選項。我也將問題減少到5人可以幫忙嗎?這是修改後的代碼。它不運行,雖然:(如何將另一個按鈕添加到預製的android程序(Android Studio)

QuizActivity.java

public class QuestionActivity extends Activity { 
    List<Question> quesList; 
    int score = 0; 
    int qid = 0; 
    Question currentQ; 
    TextView txtQuestion, times, scored; 
    Button button1, button2, button3, button4; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     QuizHelper db = new QuizHelper(this); 
     quesList = db.getAllQuestions(); 
     currentQ = quesList.get(qid); 
     txtQuestion = (TextView) findViewById(R.id.txtQuestion); 
     button1 = (Button) findViewById(R.id.button1); 
     button2 = (Button) findViewById(R.id.button2); 
     button3 = (Button) findViewById(R.id.button3); 
     button4 = (Button) findViewById(R.id.button4); 
     scored = (TextView) findViewById(R.id.score); 
     times = (TextView) findViewById(R.id.timers); 
     setQuestionView(); 
     times.setText("00:02:00"); 
     CounterClass timer = new CounterClass(60000, 1000); 
     timer.start(); 
     button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getAnswer(button1.getText().toString()); 
      } 
     }); 
     button2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getAnswer(button2.getText().toString()); 
      } 
     }); 
     button3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getAnswer(button3.getText().toString()); 
      } 
     }); 
     button4.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getAnswer(button4.getText().toString()); 
      } 
     }); 
    } 
    public void getAnswer(String AnswerString) { 
     if (currentQ.getANSWER().equals(AnswerString)) { 
      score++; 
      scored.setText("Score : " + score); 
     } else { 
      Intent intent = new Intent(QuestionActivity.this, 
        ResultActivity.class); 
      Bundle b = new Bundle(); 
      b.putInt("score", score); // Your score 
      intent.putExtras(b); // Put your score to your next 
      startActivity(intent); 
      finish(); 
     } 
     if (qid < 4) { 
      currentQ = quesList.get(qid); 
      setQuestionView(); 
     } else { 
      Intent intent = new Intent(QuestionActivity.this, 
        ResultActivity.class); 
      Bundle b = new Bundle(); 
      b.putInt("score", score); // Your score 
      intent.putExtras(b); // Put your score to your next 
      startActivity(intent); 
      finish(); 
     } 
    } 
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    @SuppressLint("NewApi") 
    public class CounterClass extends CountDownTimer { 
     public CounterClass(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 
     @Override 
     public void onFinish() { 
      times.setText("Time is up"); 
     } 
     @Override 
     public void onTick(long millisUntilFinished) { 
      long millis = millisUntilFinished; 
      String hms = String.format(
        "%02d:%02d:%02d", 
        TimeUnit.MILLISECONDS.toHours(millis), 
        TimeUnit.MILLISECONDS.toMinutes(millis) 
          - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS 
          .toHours(millis)), 
        TimeUnit.MILLISECONDS.toSeconds(millis) 
          - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
          .toMinutes(millis))); 
      System.out.println(hms); 
      times.setText(hms); 
     } 
    } 
    private void setQuestionView() { 
     txtQuestion.setText(currentQ.getQUESTION()); 
     button1.setText(currentQ.getOPTA()); 
     button2.setText(currentQ.getOPTB()); 
     button3.setText(currentQ.getOPTC()); 
     button4.setText(currentQ.getOPTD()); 
     qid++; 
    } 
} 

QuizHelper.java

public class QuizHelper extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "mathsone"; 
    private static final String TABLE_QUEST = "quest"; 
    private static final String KEY_ID = "qid"; 
    private static final String KEY_QUES = "question"; 
    private static final String KEY_ANSWER = "answer"; // correct option 
    private static final String KEY_OPTA = "opta"; // option a 
    private static final String KEY_OPTB = "optb"; // option b 
    private static final String KEY_OPTC = "optc"; // option c 
    private static final String KEY_OPTD = "optd"; // option d 
    private SQLiteDatabase dbase; 
    public QuizHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     dbase = db; 
     String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_QUEST + " (" 
       + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_QUES 
       + " TEXT, " + KEY_ANSWER + " TEXT, " + KEY_OPTA + " TEXT, " 
       + KEY_OPTB + " TEXT, " + KEY_OPTC + " TEXT " + KEY_OPTD + " TEXT)"; 
     db.execSQL(sql); 
     addQuestion(); 
     // db.close(); 
    } 
    private void addQuestion() { 
     Question q1 = new Question("5+2 = ?", "7", "8", "6", "5", "7"); 
     this.addQuestion(q1); 
     Question q2 = new Question("2+18 = ?", "18", "19", "20", "17", "20"); 
     this.addQuestion(q2); 
     Question q3 = new Question("10-3 = ?", "6", "7", "8", "5", "7"); 
     this.addQuestion(q3); 
     Question q4 = new Question("5+7 = ?", "12", "13", "14", "11", "12"); 
     this.addQuestion(q4); 
     Question q5 = new Question("3-1 = ?", "1", "3", "2", "4", "2"); 
     this.addQuestion(q5); 
     // END 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUEST); 
     onCreate(db); 
    } 
    // Adding new question 
    public void addQuestion(Question quest) { 
     // SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_QUES, quest.getQUESTION()); 
     values.put(KEY_ANSWER, quest.getANSWER()); 
     values.put(KEY_OPTA, quest.getOPTA()); 
     values.put(KEY_OPTB, quest.getOPTB()); 
     values.put(KEY_OPTC, quest.getOPTC()); 
     values.put(KEY_OPTD, quest.getOPTD()); 
     // Inserting Row 
     dbase.insert(TABLE_QUEST, null, values); 
    } 
    public List<Question> getAllQuestions() { 
     List<Question> quesList = new ArrayList<Question>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_QUEST; 
     dbase = this.getReadableDatabase(); 
     Cursor cursor = dbase.rawQuery(selectQuery, null); 
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Question quest = new Question(); 
       quest.setID(cursor.getInt(0)); 
       quest.setQUESTION(cursor.getString(1)); 
       quest.setANSWER(cursor.getString(2)); 
       quest.setOPTA(cursor.getString(3)); 
       quest.setOPTB(cursor.getString(4)); 
       quest.setOPTC(cursor.getString(5)); 
       quest.setOPTD(cursor.getString(6)); 
       quesList.add(quest); 
      } while (cursor.moveToNext()); 
     } 
     return quesList; 
    } 
} 

Question.java

public class Question extends Activity { 
    private int ID; 
    private String QUESTION; 
    private String OPTA; 
    private String OPTB; 
    private String OPTC; 
    private String OPTD; 
    private String ANSWER; 
    public Question() { 
     ID = 0; 
     QUESTION = ""; 
     OPTA = ""; 
     OPTB = ""; 
     OPTC = ""; 
     OPTD = ""; 
     ANSWER = ""; 
    } 
    public Question(String qUESTION, String oPTA, String oPTB, String oPTC,String oPTD, 
        String aNSWER) { 
     QUESTION = qUESTION; 
     OPTA = oPTA; 
     OPTB = oPTB; 
     OPTC = oPTC; 
     OPTD = oPTD; 
     ANSWER = aNSWER; 
    } 
    public int getID() { 
     return ID; 
    } 
    public String getQUESTION() { 
     return QUESTION; 
    } 
    public String getOPTA() { 
     return OPTA; 
    } 
    public String getOPTB() { 
     return OPTB; 
    } 
    public String getOPTC() { 
     return OPTC; 
    } 
    public String getOPTD() { 
     return OPTD; 
    } 
    public String getANSWER() { 
     return ANSWER; 
    } 
    public void setID(int id) { 
     ID = id; 
    } 
    public void setQUESTION(String qUESTION) { 
     QUESTION = qUESTION; 
    } 
    public void setOPTA(String oPTA) { 
     OPTA = oPTA; 
    } 
    public void setOPTB(String oPTB) { 
     OPTB = oPTB; 
    } 
    public void setOPTC(String oPTC) { 
     OPTC = oPTC; 
    } 
    public void setOPTD(String oPTD) { 
     OPTD = oPTD; 
    } 
    public void setANSWER(String aNSWER) { 
     ANSWER = aNSWER; 
    } 
} 

那麼對於activity_main.xml中我增加了一個帶按鈕id的android按鈕。

<Button 
     android:id="@+id/button4" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginLeft="80dp" 
     android:layout_marginRight="80dp" 
     android:layout_marginTop="5dp" 
     android:background="#fff" 
     android:gravity="center" 
     android:text="31" 
     android:textColor="#000000" 
     android:textSize="25.0sp" /> 

,這裏是我的logcat:

FATAL EXCEPTION: main 
Process: versionone.example, PID: 2252 
java.lang.RuntimeException: Unable to start activity ComponentInfo{versionone.example/versionone.example.QuestionActivity}: java.lang.IllegalStateException: Couldn't read row 0, col 6 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5001) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 6 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
    at android.database.CursorWindow.nativeGetString(Native Method) 
    at android.database.CursorWindow.getString(CursorWindow.java:434) 
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 
    at versionone.example.QuizHelper.getAllQuestions(QuizHelper.java:90) 
    at versionone.example.QuestionActivity.onCreate(QuestionActivity.java:38) 
    at android.app.Activity.performCreate(Activity.java:5231) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  
    at android.app.ActivityThread.access$800(ActivityThread.java:135)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:136)  
    at android.app.ActivityThread.main(ActivityThread.java:5001)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:515)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
    at dalvik.system.NativeStart.main(Native Method)  
+0

你說它沒有運行。你要麼得到一個編譯錯誤,要麼在某個時候出現堆棧跟蹤。你可以編輯你的問題,包括編譯錯誤或堆棧跟蹤? – KompjoeFriek

+0

添加我的logcat – litthether

+0

嘗試發佈您的代碼的重要位。 logcat能夠告訴你情況如何。 tl; dr – m02ph3u5

回答

3
+ KEY_OPTB + " TEXT, " + KEY_OPTC + " TEXT, " + KEY_OPTD + " TEXT)"; 

你只是錯過了KEY_OPTC後一個逗號在創建表的SQL。

+0

該程序仍然不運行:(我仍然得到相同的logcat錯誤 – litthether

+1

嘗試從手機中刪除你的應用程序,然後再次運行它。在SqliteOpenHelper中放置一些斷點,以查看sql語句是否正確執行在你的logcat中查找SQLite異常,它們可能不會崩潰你的應用程序,但是表示在重新創建表時出現問題。如果應用程序在第6列失敗,這意味着其他5可以,所以你的數據庫沒有被升級 – Raiv

相關問題