2015-02-04 5 views
0

У меня есть тест для викторины, и для этого я делаю помощник db по всем моим вопросам. У меня есть разные единицы, и у каждого блока есть 10 вопросов. показать неправильные ответы Я использую этот код:Как читать из моего помощника db?

 public static String getAnswers(List<Question> queslist) { 
    StringBuffer sb = new StringBuffer(); 
    int question = 1; 
    for (Question currentQ : queslist) { 
     if (!currentQ.isAnsweredCorrectly()) { 
      sb.append("Q").append(question).append(") ").append(currentQ.getQUESTION()).append("? \n"); 
      sb.append("Answer: ").append(currentQ.getANSWER()).append("\n\n"); 
      question++; 
     } 
    } 
    return sb.toString(); 
} 

он работает правильно, и показать мне неправильный ответ. Дело в том, что: queslist прочитал все вопросы из моего помощника db. как я могу изменить его, чтобы показать мне только каждый вопрос и ответы для моего подразделения.

и вот мой дб помощник & мой стол:

package com.example.triviality; 
import java.util.ArrayList; 
import java.util.List; 
    import android.content.ContentValues; 
    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteOpenHelper; 
    public class DbHelper extends SQLiteOpenHelper { 
private static final int DATABASE_VERSION = 1; 
// Database Name 
private static final String DATABASE_NAME = "triviaQuiz"; 
// tasks table name 
private static final String TABLE_QUEST = "quest"; 
// tasks Table Columns names 
private static final String KEY_ID = "id"; 
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 SQLiteDatabase dbase; 
public DbHelper(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)"; 
    db.execSQL(sql);   
    addQuestions(); 
    //db.close(); 
} 
private void addQuestions() 
{ 
    Question q1=new Question("Which company is the largest manufacturer" + 
      " of network equipment?","HP", "IBM", "CISCO", "CISCO"); 
    this.addQuestion(q1); 
    Question q2=new Question("Which of the following is NOT " + 
      "an operating system?", "SuSe", "BIOS", "DOS", "BIOS"); 
    this.addQuestion(q2); 
    Question q3=new Question("Which of the following is the fastest" + 
      " writable memory?","RAM", "FLASH","Register","Register"); 
    this.addQuestion(q3); 
    Question q4=new Question("Which of the following device" + 
      " regulates internet traffic?", "Router", "Bridge", "Hub","Router"); 
    this.addQuestion(q4); 
    Question q5=new Question("Which of the following is NOT an" + 
      " interpreted language?","Ruby","Python","BASIC","BASIC"); 
    this.addQuestion(q5); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUEST); 
    // Create tables again 
    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()); 
    // 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)); 
      quesList.add(quest); 
     } while (cursor.moveToNext()); 
    } 
    // return quest list 
    return quesList; 
} 
public int rowcount() 
{ 
    int row=0; 
    String selectQuery = "SELECT * FROM " + TABLE_QUEST; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    row=cursor.getCount(); 
    return row; 
} 

}

+0

Почему вы не получаете ответы на вопросы для данного устройства из базы данных, а не по всем вопросам? – beresfordt

+0

Как я могу это сделать? Это немного сложно ... – senator

+0

Можете ли вы показать код в dbHelper, который вы вызываете, чтобы получить свой список ? – beresfordt

ответ

0

Наименьшее изменение, которое будет соответствовать вашим требованиям, является: В базе данных добавить еще один столбец, чтобы определить, какая единица принадлежит данный вопрос к. После того, как вы сделали это создать метод, который возвращает список вопросов для этой единицы, то есть что-то вроде:

public List<Question> getQuestionsForUnit(String unit) { 
    List<Question> quesList = new ArrayList<Question>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_QUEST + "WHERE UNIT = '" + unit "'"; 
    .... 

Общих хотя я думаю, что вы можете захотеть пересмотреть свою схему; сохраняя вопрос, возможные ответы и ответ, заданный пользователем в одной таблице, кажутся немного грязными.

Смежные вопросы