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 使用EditText值查询SQLite,然后在ListView中显示结果_Android_Sqlite_Listview_Android Listview - Fatal编程技术网

Android 使用EditText值查询SQLite,然后在ListView中显示结果

Android 使用EditText值查询SQLite,然后在ListView中显示结果,android,sqlite,listview,android-listview,Android,Sqlite,Listview,Android Listview,因此,我目前可以在ListView中查看SQLite数据,但由于DB控制器中的set语句,它将带回所有记录。但是我希望用户能够向EditText中添加一个值,并使用该值查询数据库,然后将结果显示到ListView中。以下是我目前使用的两段代码,以防万一。如有任何帮助,我们将不胜感激,并提前表示感谢 在我的MainActivity中,我在oncreate中调用此函数以显示listview: public void listRecs(){ ArrayList<HashMap&

因此,我目前可以在ListView中查看SQLite数据,但由于DB控制器中的set语句,它将带回所有记录。但是我希望用户能够向EditText中添加一个值,并使用该值查询数据库,然后将结果显示到ListView中。以下是我目前使用的两段代码,以防万一。如有任何帮助,我们将不胜感激,并提前表示感谢

在我的MainActivity中,我在oncreate中调用此函数以显示listview:

public void listRecs(){

        ArrayList<HashMap<String, String>> scanList = this.controller.getAllRecsExpDESC();

        myAdapter = new SimpleAdapter(this, scanList, R.layout.list_view_layout, new String[]{"regNo","streetName","recExpDate","tvPosition"},
               new int[]{R.id.reg_No,R.id.street_Name,R.id.date_Time,R.id.tv_Position});

        Recs.setAdapter(myAdapter);
    }
public void listRecs(){
ArrayList scanList=this.controller.getAllRecsExpDESC();
myAdapter=new SimpleAdapter(这个,扫描列表,R.layout.list\u view\u布局,新字符串[]{“regNo”,“streetName”,“recExpDate”,“tvPosition”},
新int[]{R.id.reg\u编号,R.id.street\u名称,R.id.date\u时间,R.id.tv\u位置});
记录设置适配器(myAdapter);
}
这是我的DB控制器的代码:

public ArrayList<HashMap<String, String>> getAllRecsExpDESC() {
        ArrayList<HashMap<String, String>> wordList;
        wordList = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT  * FROM recs ORDER BY recExpDate DESC";
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("regNo", cursor.getString(0));
                map.put("tvPosition", cursor.getString(1));
                map.put("streetName", cursor.getString(2));
                map.put("recExpDate", cursor.getString(3));
                wordList.add(map);
            } while (cursor.moveToNext());
        }
        database.close();
        return wordList;
    }
public ArrayList getAllRecsExpDESC(){
ArrayList词表;
wordList=newarraylist();
String selectQuery=“按recExpDate DESC从记录订单中选择*”;
SQLiteDatabase=this.getWritableDatabase();
Cursor=database.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
HashMap=newHashMap();
map.put(“regNo”,cursor.getString(0));
map.put(“tvPosition”,cursor.getString(1));
map.put(“streetName”,cursor.getString(2));
put(“recExpDate”,cursor.getString(3));
添加(地图);
}while(cursor.moveToNext());
}
close()数据库;
返回词表;
}

听上去,您可以使用与上面类似的函数,但它使用字符串参数并将其用作原始查询的一部分

public ArrayList<HashMap<String, String>> getRecsFromParameter(String PARAMETER)
否则,这将以同样的方式工作,您将获得一个列表结果集,并将使用该列表创建一个适配器

但需要注意的是,基于用户输入执行代码确实会使应用程序容易受到攻击。您可能还需要采取措施防止用户输入任何他们想要的内容,以防止损坏内部数据库

编辑:哦!要从编辑文本中获取字符串,可以执行以下操作:

(EditText) findViewById(R.id.edit_text_id).getEditableText().toString();

谢谢你的回复本杰明,好吧,我想我明白你的意思了,但是从主要活动中我会怎么做?从你的帖子看来,这一切似乎都在DB控制器内,我只是想知道我主要会做什么?我会这样做:
ArrayList scanList=this.controller.getAllRecsExpDESC(参数)(EditText) findViewById(R.id.edit_text_id).getEditableText().toString();