如何设置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
相关产品推荐
相关产品推荐

