安卓开发:如何利用用户输入的百分比从SQLite获取适配院校推荐?
解决方案:用传递的百分比筛选SQLite中的院校列表
看起来你已经完成了第一步——把学生的百分比从MainActivity传递到了DisplayList,接下来只需要把这个数值用在数据库查询里,筛选出符合条件的院校即可。我们一步步来改:
1. 完善DisplayList中百分比的处理
首先,在DisplayList里你已经拿到了传递过来的百分比字符串,但需要把它转换成数值类型(比如float),这样才能和数据库里的录取分数线做比较。另外,要把这个数值传递给数据库查询方法:
修改后的DisplayList.java:
public class DisplayList extends AppCompatActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); setContentView(R.layout.activity_display_list); TextView percentage = (TextView)findViewById(R.id.textView); Bundle bundle = getIntent().getExtras(); // 处理传递过来的百分比 float studentPercentage = 0; if (bundle != null && bundle.getString("Percentage") != null) { String perStr = bundle.getString("Percentage"); // 显示传递过来的百分比到TextView percentage.setText("你的百分比: " + perStr + "%"); // 转成float类型,注意捕获可能的转换异常 try { studentPercentage = Float.parseFloat(perStr); } catch (NumberFormatException e) { e.printStackTrace(); // 如果输入不是有效数字,可以提示用户 Toast.makeText(this, "请输入有效的百分比数值", Toast.LENGTH_SHORT).show(); finish(); // 回到MainActivity return; } } else { // 没有拿到百分比的情况,返回主页面 Toast.makeText(this, "请输入百分比", Toast.LENGTH_SHORT).show(); finish(); return; } this.listView = (ListView)findViewById(R.id.listview); DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); databaseAccess.open(); // 调用修改后的getColleges方法,传入学生百分比 List<String> colleges = databaseAccess.getColleges(studentPercentage); databaseAccess.close(); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, colleges); this.listView.setAdapter(adapter); } }
2. 修改DatabaseAccess的查询方法,添加筛选条件
接下来需要修改DatabaseAccess.java中的getColleges方法,让它接受百分比参数,并执行带条件的SQL查询。这里假设你的Ahmednagar表中有一个字段(比如cutoff_percentage)存储了院校的最低录取百分比——如果你的字段名不同,记得改成你实际的字段名。
另外,原来的方法把每个字段单独添加到列表里,会导致ListView里每一项是单个字段(比如院校名、地址等),这显然不是你想要的。我们把每个院校的信息组合成一个完整的字符串,方便显示:
修改后的DatabaseAccess.java的getColleges方法:
/** * 根据学生百分比筛选符合条件的院校 * @param studentPercentage 学生的综合百分比 * @return 符合条件的院校列表 */ public List<String> getColleges(float studentPercentage) { List<String> list = new ArrayList<>(); // 假设你的表中有cutoff_percentage字段,筛选学生百分比>=院校最低录取线的院校 // 使用参数化查询避免SQL注入 String query = "SELECT * FROM Ahmednagar WHERE cutoff_percentage <= ?"; Cursor cursor = database.rawQuery(query, new String[]{String.valueOf(studentPercentage)}); cursor.moveToFirst(); while (!cursor.isAfterLast()) { // 把院校的多个字段组合成一个字符串,比如: // 院校名称 (录取分数线: XX%) - 地址 String collegeInfo = cursor.getString(1) // 假设第1列是院校名称 + " (录取分数线: " + cursor.getString(5) + "%)" // 假设第5列是cutoff_percentage + " - " + cursor.getString(2); // 假设第2列是院校地址 list.add(collegeInfo); cursor.moveToNext(); } cursor.close(); return list; }
注意事项:
- 请根据你实际的表结构调整字段索引(
cursor.getString(1)、cursor.getString(5)等),确保对应到正确的字段(比如院校名称、录取分数线、地址等)。 - SQL查询的条件可以根据你的需求调整:如果是推荐学生百分比大于等于院校录取线的,用
cutoff_percentage <= ?;如果是推荐录取线接近学生百分比的,可以调整条件(比如cutoff_percentage BETWEEN ?-5 AND ?+5)。 - 一定要用参数化查询(
rawQuery的第二个参数),不要直接把百分比拼到SQL字符串里,避免SQL注入风险。
3. 测试验证
现在运行APP,输入一个百分比,点击提交后,DisplayList应该会显示所有录取分数线低于或等于该百分比的院校列表了。
如果遇到问题,可以检查:
- 数据库表的字段名和索引是否正确
- 百分比转换是否成功(比如输入的是合法的数字)
- 数据库是否正确打开,表是否存在
内容的提问来源于stack exchange,提问作者vibrant32
相关产品推荐
相关产品推荐

