Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何显示从Android Studio数据库中选择的随机行列表中的正确行?_Android_Sqlite_Android Studio_Android Sqlite_Android Database - Fatal编程技术网

如何显示从Android Studio数据库中选择的随机行列表中的正确行?

如何显示从Android Studio数据库中选择的随机行列表中的正确行?,android,sqlite,android-studio,android-sqlite,android-database,Android,Sqlite,Android Studio,Android Sqlite,Android Database,我正在我的Android应用程序中制作一个测验部分。我建立了一个数据库,这样程序就可以从表中随机选择行(问题)。这些随机问题随后会显示在实际的测验中,之后用户可以看到他回答的问题是对的还是错的。问题在于,在显示正确答案的活动中,问题与测验中的完全不同。它们似乎也是随机的 这是数据库类的摘录: // Table Columns names private static final String KEY_ID = "id"; private static final String KEY_QUEST

我正在我的Android应用程序中制作一个测验部分。我建立了一个数据库,这样程序就可以从表中随机选择行(问题)。这些随机问题随后会显示在实际的测验中,之后用户可以看到他回答的问题是对的还是错的。问题在于,在显示正确答案的活动中,问题与测验中的完全不同。它们似乎也是随机的

这是数据库类的摘录:

// Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_QUESTION = "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 myDatabase;

public SQLDatabaseT1(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db1) {

    myDatabase=db1;

    // A new table is created if there is none
    String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTION + " ( "
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_QUESTION
            + " TEXT, " + KEY_ANSWER + " TEXT, "+ KEY_OPTA +" TEXT, "
            + KEY_OPTB +" TEXT, "+ KEY_OPTC +" TEXT, " + KEY_OPTD + " TEXT)";

    db1.execSQL(sql);

    // Adds questions from this method below
    addQuestions1();
}

@Override
public void onUpgrade(SQLiteDatabase db1, int oldV, int newV) {

    // Drop older table if existed
    db1.execSQL("DROP TABLE IF EXISTS " + TABLE_QUESTION);

    // Creates tables again
    onCreate(db1);
}

// Takes 7 random rows from the table and puts into the topic quiz
public Cursor getRandomDataItemFromDb(String TABLE_QUESTION, String limit) {
    SQLiteDatabase db1 = this.getWritableDatabase();
    Cursor cursor = db1.rawQuery("SELECT * FROM " + TABLE_QUESTION + " ORDER BY RANDOM() LIMIT 7", null);
    if (cursor.moveToFirst()) {
        return cursor;
    }
    return cursor;
}

// Sets the limit of how many questions will be in the quiz
public int rowCount()
{
    int row=7; //There will be 7 questions in a quiz
    return row;
}

public List<Question> getAllQuestions() {

    List<Question> quesList = new ArrayList<Question>();

    String selectQuery = "SELECT * FROM " + TABLE_QUESTION + " ORDER BY RANDOM() LIMIT 7";

    myDatabase=this.getReadableDatabase();

    Cursor cursor = myDatabase.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            Question quest = new Question();
            quest.setId(cursor.getInt(0));
            quest.setQUESTION(cursor.getString(1));
            quest.setANSWER(cursor.getString(2));
            quest.setOptionA(cursor.getString(3));
            quest.setOptionB(cursor.getString(4));
            quest.setOptionC(cursor.getString(5));
            quest.setOptionD(cursor.getString(6));

            quesList.add(quest);

        } while (cursor.moveToNext());
    }
    // returns question list
    return quesList;
}
//表列名称
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串密钥\u QUESTION=“QUESTION”;
私有静态最终字符串键\u ANSWER=“ANSWER”//正确的选择
私有静态最终字符串密钥\u OPTA=“OPTA”//方案a
私有静态最终字符串键\u OPTB=“OPTB”//方案b
专用静态最终字符串键\u OPTC=“OPTC”//备选案文c
私有静态最终字符串密钥\u OPTD=“OPTD”//方案d
私有SQLiteDatabase-myDatabase;
公共SQLDatabaseT1(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db1){
myDatabase=db1;
//如果没有,将创建一个新表
String sql=“创建不存在的表格”+表格\问题+”(“
+密钥ID+“整数主键自动递增,”+密钥问题
+“文本,”+按键+答案+“文本,”+按键+选项+文本,”
+按键OPTB+“文本”+“按键OPTC+“文本”+“按键OPTD+“文本”;
db1.execSQL(sql);
//在下面添加此方法中的问题
添加问题1();
}
@凌驾
公共void onUpgrade(SQLiteDatabase db1、intoldv、intnewv){
//删除旧表(如果存在)
db1.execSQL(“如果存在删除表”+表_问题);
//再次创建表
onCreate(db1);
}
//从表格中随机抽取7行,放入主题测验
公共游标getRandomDataItemFromDb(字符串表\u问题,字符串限制){
SQLiteDatabase db1=this.getWritableDatabase();
Cursor Cursor=db1.rawQuery(“从“+表_问题+”按随机顺序()限制7”中选择*,null);
if(cursor.moveToFirst()){
返回光标;
}
返回光标;
}
//设置测验中的问题数量限制
公共整数行计数()
{
int row=7;//测验中将有7个问题
返回行;
}
公共列表getAllQuestions(){
List quesList=new ArrayList();
String selectQuery=“SELECT*FROM”+表\问题+“ORDER BY RANDOM()LIMIT 7”;
myDatabase=this.getReadableDatabase();
Cursor Cursor=myDatabase.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
问题探索=新问题();
setId(cursor.getInt(0));
setquest.setQUESTION(cursor.getString(1));
setANSWER(cursor.getString(2));
setOptionA(cursor.getString(3));
setOptionB(cursor.getString(4));
setOptionC(cursor.getString(5));
setOptionD(cursor.getString(6));
添加(任务);
}while(cursor.moveToNext());
}
//返回问题列表
返回任务列表;
}
这是显示问题列表的类,其中显示正确答案和用户的答案:

public class QuizViewAnswers1 extends AppCompatActivity {

private ListView listofAnswers;

private List<Question> questionsList;
private Question currentQuestion;

ArrayList<HashMap<String, Object>> originalValues = new ArrayList<HashMap<String, Object>>();

HashMap<String, Object> temp = new HashMap<String, Object>();

public static String KEY_QUESTION = "questions";
public static String KEY_CANS = "canswer";
public static String KEY_YANS = "yanswer";

private CustomAdapter adapter;

ArrayList<String> myAnsList = new ArrayList<String>();

Button homeQuiz;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.quiz_show_ans);
    String selectQuery;
    Intent in = getIntent();
    Bundle b = getIntent().getExtras();
    myAnsList=in.getExtras().getStringArrayList("myAnsList");

    listofAnswers=(ListView)findViewById(R.id.listofAnswers);

    //Initialize the database
    final SQLDatabaseT1 sqldb = new SQLDatabaseT1(this);
    questionsList= sqldb.getAllQuestions();


    for (int i = 0; i < 7; i++) {
        currentQuestion = questionsList.get(i);
        temp = new HashMap<String, Object>();
        temp.put(KEY_QUESTION,  currentQuestion.getQUESTION());
        temp.put(KEY_CANS, currentQuestion.getANSWER());
        temp.put(KEY_YANS, myAnsList.get(i));

        // add the row to the ArrayList
        originalValues.add(temp);

    }

    adapter = new CustomAdapter(QuizViewAnswers1.this, R.layout.ans_list, originalValues);
    listofAnswers.setAdapter(adapter);

    homeQuiz = (Button) findViewById(R.id.quizHome);
    homeQuiz.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(QuizViewAnswers1.this, Quiz.class);
            startActivity(intent);
            finish();
        }
    });
}

// define your custom adapter
private class CustomAdapter extends ArrayAdapter<HashMap<String, Object>> {
    LayoutInflater inflater;

    public CustomAdapter(Context context, int textViewResourceId, ArrayList<HashMap<String, Object>> Strings) {
        super(context, textViewResourceId, Strings);
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    // class for caching the views in a row
    private class ViewHolder {

        TextView viewQuestions, viewAnswers, yourAnswers;

    }

    ViewHolder viewHolder;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {

            convertView = inflater.inflate(R.layout.ans_list, null);
            viewHolder = new ViewHolder();

            viewHolder.viewQuestions = (TextView) convertView.findViewById(R.id.question);

            viewHolder.viewAnswers = (TextView) convertView
                    .findViewById(R.id.correctanswer);
            viewHolder.yourAnswers = (TextView) convertView
                    .findViewById(R.id.useranswer);

            // link the cached views to the convertview
            convertView.setTag(viewHolder);

        } else
            viewHolder = (ViewHolder) convertView.getTag();

        viewHolder.viewQuestions.setText(originalValues.get(position).get(KEY_QUESTION)
                .toString());

        viewHolder.viewAnswers.setText("Correct Answer: " + originalValues.get(position).get(KEY_CANS)
                .toString());
        viewHolder.yourAnswers.setText("Your Answer: " + originalValues.get(position)
                .get(KEY_YANS).toString());

        // return the view to be displayed
        return convertView;
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
}
公共类QuizViewAnswers1扩展了AppCompative活动{
私有ListView listofAnswers;
私人列表问题列表;
私人问题;
ArrayList originalValues=新的ArrayList();
HashMap temp=新的HashMap();
公共静态字符串键\u QUESTION=“questions”;
公共静态字符串键\u CANS=“canswer”;
公共静态字符串键\u YANS=“yanswer”;
专用自定义适配器;
ArrayList myAnsList=新建ArrayList();
按钮家庭测验;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.quick\u show\u ans);
字符串选择查询;
Intent in=getIntent();
Bundle b=getIntent().getExtras();
myAnsList=in.getExtras().getStringArrayList(“myAnsList”);
ListOfAnwers=(ListView)findViewById(R.id.ListOfAnwers);
//初始化数据库

final SQLDatabaseT1 sqldb=新的SQLDatabaseT1(此); questionsList=sqldb.getAllQuestions(); 对于(int i=0;i<7;i++){ currentQuestion=questionsList.get(i); temp=newhashmap(); 临时放置(KEY_QUESTION,currentQuestion.getQUESTION()); 温度输入(按键,currentQuestion.getANSWER()); 临时安置(基扬,myAnsList.get(i)); //将该行添加到ArrayList 原始值。添加(温度); } adapter=新的CustomAdapter(QuizViewAnswers1.this、R.layout.ans\u列表、原始值); 设置适配器(适配器); homequick=(按钮)findviewbyd(R.id.quizHome); homequick.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 意向意向=新意向(QuizViewAnswers1.this,quick.class); 星触觉(意向); 完成(); } }); } //定义自定义适配器 私有类CustomAdapter扩展了ArrayAdapter{ 充气机; 公共CustomAdapter(上下文上下文、int textViewResourceId、ArrayList字符串){ super(上下文、textViewResourceId、字符串); 充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务); } //类以缓存行中的视图 私有类视窗持有者{ 文本查看查看问题、查看答案、您的答案; } 持票人持票人; @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ if(convertView==null){ convertView=充气机。充气(R.layout.ans_列表,空); viewHolder=新的viewHolder(); viewHolder.viewQuestions=(TextView)convertView.FindViewBy