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