【问题标题】:Query SQLite with Editext value then display results in a ListView使用 Edittext 值查询 SQLite,然后在 ListView 中显示结果
【发布时间】:2015-04-07 20:55:46
【问题描述】:

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

在我的 MainActivity 中,我在 oncreate 中调用它来显示列表视图:

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 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;
    }

【问题讨论】:

    标签: android sqlite listview android-listview


    【解决方案1】:

    从事物的声音来看,您将采用与上述功能类似的功能,但它采用字符串参数并将其用作原始查询的一部分。

    public ArrayList<HashMap<String, String>> getRecsFromParameter(String PARAMETER)
    

    不确定您想要做什么,但查询类似于:

    String selectQuery = "SELECT  * FROM recs WHERE Column = " + PARAMETER + "ORDER BY recExpDate DESC";
    

    否则这将几乎以相同的方式工作,您将获得一个列表结果集并使用该列表创建一个适配器。

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

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

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

    【讨论】:

    • 感谢您的回复本杰明,好的,我想我明白您的意思了,但我会从主要活动中做些什么?从您的帖子看来,这一切似乎都在数据库控制器中,我只是想知道我主要会做什么?我会做这样的事情吗:ArrayList&lt;HashMap&lt;String, String&gt;&gt; scanList = this.controller.getAllRecsExpDESC(PARAMETER); 抱歉,我对此还是有些陌生。
    • 别担心!我们曾经都是新人。 :) 必须在 MainActivity 代码中查找视图/抓取可编辑文本,其他范围可能无法访问 edittext 以获取值。否则,基本上,是的,你会做与你的问题相同的事情,但调用不同的函数。
    • 太棒了,它就像一种享受!非常感谢 :) 我一定会考虑 SQL 注入问题!我现在将发布答案。
    • 太棒了!有机会请采纳答案。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2020-03-25
    • 1970-01-01
    • 2021-09-09
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多