Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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 将字符串变量传递给db helper并在查询中使用_Android_Arrays_Android Intent_Get - Fatal编程技术网

Android 将字符串变量传递给db helper并在查询中使用

Android 将字符串变量传递给db helper并在查询中使用,android,arrays,android-intent,get,Android,Arrays,Android Intent,Get,我创建了两个字符串变量“questionString”和“answerSetId”-第一个变量我已分配给textview-第二个变量我想传递给我的db helper类: public void showNextRandomQuestion3() { SQLDatabaseHelper db = new SQLDatabaseHelper(this); //get the data from the database List<Li

我创建了两个字符串变量“questionString”和“answerSetId”-第一个变量我已分配给textview-第二个变量我想传递给我的db helper类:

    public void showNextRandomQuestion3() {

        SQLDatabaseHelper db = new SQLDatabaseHelper(this);

        //get the data from the database
        List<List<String>> listList = db.getAllAnswersByQuestion1();

        //Get the question/text/answer Strings
        List<String> questionStrings = listList.get(0); //question Strings
        List<String> answerSetIds = listList.get(4);

        //Generate random index
        Random r = new Random();
        int rand = Math.abs((r.nextInt() % questionStrings.size()));

        //get answer description for randomly selected question
        String questionString = questionStrings.get(rand);  
        String answerSetId = answerSetIds.get(rand); 

        questionView.setText(questionString);

        }
public void showNextRandomQuestion3(){
SQLDatabaseHelper db=新的SQLDatabaseHelper(此);
//从数据库中获取数据
List=db.getAllAnswersByQuestion1();
//获取问题/文本/答案字符串
List questionStrings=listList.get(0);//问题字符串
List answerSetIds=listList.get(4);
//生成随机索引
随机r=新随机();
int rand=Math.abs((r.nextInt()%questionStrings.size());
//获取随机选择问题的答案描述
String questionString=questionStrings.get(rand);
字符串answerSetId=answerSetId.get(rand);
questionView.setText(questionString);
}
在我的db helper类中,我想使用此字符串变量作为查询的pat:

public List<List<String>> getAnswers() {

    List<String> array1 = new ArrayList<String>();    
    List<String> array2 = new ArrayList<String>();  

    SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT  * FROM " + TABLE_ANSWERS + "WHERE " + ASID
            + " = " + ??answerSetId??;

   Cursor c = db.rawQuery(selectQuery, null);
   if (c.moveToFirst()) {
    do {

     String textdescr = c.getString(c.getColumnIndex(TDESCR));
     String answersdescr = c.getString(c.getColumnIndex(ADESCR));
     array1.add(textdescr);
     array2.add(answersdescr);;

    } while (c.moveToNext());

 }
   List< List<String> > listArray2 = new ArrayList< List<String> >();
   listArray2.add(array1);
   listArray2.add(array2);

   return listArray2;
}
public List getAnswers(){
List array1=新的ArrayList();
List array2=新的ArrayList();
SQLiteDatabase db=this.getReadableDatabase();
String selectQuery=“SELECT*FROM”+表\答案+“其中”+ASID
+“=”+?应答器ID??;
游标c=db.rawQuery(selectQuery,null);
if(c.moveToFirst()){
做{
String textdescr=c.getString(c.getColumnIndex(TDESCR));
String answersdescr=c.getString(c.getColumnIndex(ADESCR));
数组1.添加(textdescr);
(a)加上(答辩书);;
}而(c.moveToNext());
}
ListlistArray2=新建ArrayList();
列表array2.add(array1);
列表array2.add(array2);
返回列表2;
}

实现这一点的最佳方法是什么?

要执行选择,您可以使用

而不是原始查询。就你而言:

String selection = ASID+"=?";
String selectionArgs[] = new String[]{String.valueOf(answerSetId)};
Cursor c = db.query(TABLE_ANSWERS, null, selection, selectionArgs, null, null, null);
您还可以选择一些特定的列,将列名称列表作为第二个参数传递(而不是null)。此外,您还可以将示例中的最后三个空值替换为添加
GROUP BY
HAVING
ORDER BY
子句

例如,在查询中,您只对TDESCR和ADESCR两列感兴趣。因此,您可以使用以下查询:

String[] columns = new String[]{TDESCR, ADESCR};
String selection = ASID+"=?";
String[] selectionArgs = new String[]{String.valueOf(answerSetId)};
Cursor c = db.query(TABLE_ANSWERS, columns, selection, selectionArgs, null, null, null);
还有很多其他的重写查询方法。请看一下文档

但是,如果愿意,可以通过以下方式执行原始查询:

String queryString = "SELECT * FROM " + TABLE_ANSWERS +
    " WHERE "+ASID+"=?";
String[] selectionArgs = new String[]{String.valueOf(answerSetId)};
sqLiteDatabase.rawQuery(queryString, selectionArgs);

太好了,谢谢。对于我问题的第一部分-如何将“answerSetId”从主活动传递给db helper?只需修改您的方法
getAnswerSetId(字符串answerSetId)
再次感谢-可能会问一个非常明显的问题,但我需要向我的主活动方法“showNextRandomQuestion3()添加什么'来传递“answerSetId”。我假设您的db helper正在扩展
SQLiteOpenHelper
,因此您可以将metod
showNextRandomQuestion3()
声明为静态,并从主活动中以以下方式调用它:
DbHelper.showNextRandomQuestion3()
。但是,考虑到一种更清晰和模块化的管理方法,它使用DAO类,将访问数据库所需的所有方法封装在一起。看,你可以看到DAO类被命名为“代码>评论”DATSURCE @ JRGART,如果我的答案帮助你,考虑接受它;
String queryString = "SELECT * FROM " + TABLE_ANSWERS +
    " WHERE "+ASID+"=?";
String[] selectionArgs = new String[]{String.valueOf(answerSetId)};
sqLiteDatabase.rawQuery(queryString, selectionArgs);