You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置AutoCompleteTextView的EditText属性setText?代码问题求助

解决AutoCompleteTextView设置数据库字段的setText参数问题

你代码里的核心问题是给Dept(AutoCompleteTextView)设置文本时,c.getString()缺少列索引参数,这会导致编译或运行报错。按照你所说的对应序号3,正确写法是Dept.setText(c.getString(3))。

同时你的代码还有两处可以优化的地方:

  • 重复调用c.moveToFirst()属于逻辑冗余,可将Dept的设置逻辑合并到同一个判断块中
  • 直接拼接SQL语句存在SQL注入风险,建议改用参数化查询

修正后的完整代码如下:

if (view == View) {
    // 检查学号是否为空
    String rollNoStr = Rollno.getText().toString().trim();
    if (rollNoStr.length() == 0) {
        showMessage("Error", "Please enter Rollno");
        return;
    }
    // 使用参数化查询避免SQL注入
    Cursor c = db.rawQuery("SELECT * FROM student WHERE rollno=?", new String[]{rollNoStr});
    if (c.moveToFirst()) {
        Name.setText(c.getString(1));
        Marks.setText(c.getString(2));
        // 给Dept设置对应列的内容,索引为3
        Dept.setText(c.getString(3));
    } else {
        showMessage("Error", "Invalid Rollno");
        clearText();
    }
    // 关闭Cursor释放资源
    c.close();
}

补充说明:

  • Cursor的列索引从0开始计数,你代码里用getString(1)对应Name、getString(2)对应Marks,所以getString(3)正好匹配你所说的序号3的Dept列
  • 用完Cursor后必须调用close(),避免资源泄漏
  • 参数化查询能有效避免恶意输入引发的SQL注入问题,安全性远高于字符串拼接

内容的提问来源于stack exchange,提问作者user17369875

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:50:23