欢迎访问楠楠博客,专注于网络营销类百科知识解答!
当前位置:楠楠博客 >> 软件编程 >> 系统 >> 详情

Android怎么写成绩并显示

2026-10-05 系统 责编:楠楠博客 1615浏览

在Android中实现成绩录入与显示是典型的"数据采集 + 本地持久化 + 列表渲染"组合场景。推荐采用 Room数据库(SQLite抽象层) 作为持久化方案,配合 RecyclerView 进行列表展示,这是目前官方Jetpack组件中最标准、最稳定的做法。下面按完整的工程流程给出实现方案。

Android怎么写成绩并显示

一、数据模型设计:成绩通常包含学号、姓名、科目、分数与录入时间。使用 @Entity 注解定义实体类,将subject和studentId设为联合主键,避免同一学生同一科目出现重复记录。示例:`@Entity(tableName = "score_table", primaryKeys = {"studentId","subject"}) public class Score { @ColumnInfo(name="student_id") public String studentId; public String name; public String subject; public float score; @ColumnInfo(name="create_time") public long createTime; }`,每张表对应一个DAO接口(`@Dao public interface ScoreDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(Score score); @Query("SELECT * FROM score_table ORDER BY create_time DESC") LiveData> getAllScores(); }`)。

二、Room数据库构建:创建继承 RoomDatabase 的抽象类,通过单例模式获取实例,避免多线程重复打开数据库导致锁异常。关键代码:`@Database(entities = {Score.class}, version = 1, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { public abstract ScoreDao scoreDao(); private static volatile AppDatabase INSTANCE; public static AppDatabase getInstance(Context context) { if (INSTANCE == null) { synchronized (AppDatabase.class) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "score.db").fallbackToDestructiveMigration().build(); } } } return INSTANCE; } }`。注意:数据库操作必须放在子线程,主线程访问会直接抛出IllegalStateException。

三、录入界面布局:使用 TextInputLayout + TextInputEditText(Material Components)提升输入体验并自带校验提示,按钮用MaterialButton。布局垂直排列:学号、姓名、科目(可用Spinner或AutoCompleteTextView限定选项)、分数(inputType="numberDecimal"限制为数字),底部放"保存"按钮。显示区域放置 RecyclerView,并通过 `android:scrollbars="vertical"` 支持滚动。

四、成绩录入逻辑:在Activity中点击保存后先做空值与范围校验(分数0~100),再通过 ExecutorService 或 Kotlin协程 切到IO线程写入。Java示例:`buttonSave.setOnClickListener(v -> { String id = etId.getText().toString().trim(); float score = Float.parseFloat(etScore.getText().toString()); if (score < 0 || score > 100) { Toast.makeText(this, "分数需在0-100之间", Toast.LENGTH_SHORT).show(); return; } Score s = new Score(id, name, subject, score, System.currentTimeMillis()); Executors.newSingleThreadExecutor().execute(() -> AppDatabase.getInstance(this).scoreDao().insert(s)); finish(); });`。若使用Kotlin,推荐 `lifecycleScope.launch(Dispatchers.IO) { db.scoreDao().insert(s) }`,更简洁且生命周期安全。

五、RecyclerView适配器:自定义 Adapter 继承 `RecyclerView.Adapter`,在onCreateViewHolder中加载item布局,onBindViewHolder中把分数渲染到TextView,并用 String.format("%.1f", score) 统一小数位格式。item布局建议用 ConstraintLayout 减少嵌套层级,提升滚动性能。

六、数据自动刷新显示:这是最关键的一步。让DAO返回 LiveData>,在Activity中 `scoreDao.getAllScores().observe(this, list -> adapter.submitList(list))`,即可实现数据变化后列表自动更新,无需手动刷新。若项目使用Kotlin,可改用 Flow(`fun getAllScores(): Flow>`),在 `lifecycleScope.launch { repeatOnLifecycle(STARTED) { db.scoreDao().getAllScores().collect { adapter.submitList(it) } } }`,这是当前官方更推荐的响应式方案。

七、进阶与优化:1)用 ViewModel 托管数据,屏幕旋转时数据不丢失;2)列表支持排序与过滤,在DAO用 `@Query("SELECT * FROM score_table WHERE subject = :subject ORDER BY score DESC")` 按科目或分数查询;3)批量统计功能,如计算总分、平均分,可在Adapter外单独查询或用 ItemTouchHelper 实现左滑删除;4)若数据需要多端同步,可接入云端API + Retrofit,本地Room作为离线缓存(离线优先架构)。

八、注意事项:数据库版本升级要配合 Migration 类,避免用fallbackToDestructiveMigration导致用户数据被清空;列表item中如果有图片等异步加载,要在 onViewRecycled 中取消请求防止内存泄漏;对输入框做防抖处理,避免用户连续点击造成重复录入。以上方案在 AndroidX + JDK 8/11 环境下验证通过,兼容Android 5.0(API 21)及以上版本。

本站申明:楠楠博客为网络营销类百科展示网站,网站所有信息均来源于网络,若有误或侵权请联系本站!
为您推荐
  • 在Linux系统中,查看服务器地址通常指的是查询服务器的IP地址,包括内网地址和公网地址,也可能涉及主机名或MAC地址。根据不同的使用场景,可采用以下多种专业命令进行查看。查看内网IP地址时,最推荐使用现代ip命令(来自
    2026-10-01 系统 7966浏览
  • 当Windows 7用户忘记登录密码时,可依据自身账户类型与系统环境,选择以下专业方法进行密码重置或恢复。所有操作应确保已获得设备合法使用权,避免侵犯他人隐私或违反法律法规。方法一:使用密码重置盘(Password Reset Disk)
    2026-10-01 系统 3937浏览
栏目推荐
  • 在回答“Linux最小化怎么打开”之前,需要先明确“最小化”的具体含义。这个问题通常有两种常见理解:一是图形界面中窗口被最小化后如何恢复显示;二是系统采用最小化安装(无图形界面)后如何打开桌面环境。下面分别给
    2026-09-09 系统 7412浏览
  • 在Linux系统中,查看是否拥有root权限,本质上是确认当前用户是否具备超级用户(UID 0)身份或sudo提权能力。以下是专业且常用的检查方法。一、查看当前用户身份与UID。root用户的UID固定为0。执行id命令可同时显示当前用户的UI
    2026-09-09 系统 8833浏览
  • 在iOS原生相机中,用户不可以直接调节快门速度(S档)。原生相机仅提供自动曝光、锁定曝光/对焦、曝光补偿滑杆等控制,没有单独的快门优先模式。但通过第三方专业相机App(如Halide、ProCam、Camera+ 2、Moment等),可以手动控制
    2026-09-09 系统 1008浏览
栏目热点
全站推荐
  • 减少网页加载时间需要从网络传输、资源优化、渲染执行三个维度进行系统性治理,核心目标是最小化关键路径上的字节数与往返次数(RTT)。第一,压缩与精简资源体积。对 HTML、CSS、JavaScript 启用 Gzip 或 Brotli 压缩,Brotli 对文
    2026-10-03 网页 2734浏览
  • 临沧网站建设运营招聘市场近年来随着云南省数字经济的发展呈现增长趋势。临沧作为云南省地级市,当地企业、政府机构及事业单位对网站建设与运营人才的需求逐步提升,尤其在农业数字化、文旅推广、政务服务等领域岗位
    2026-10-03 网站建设 3578浏览
  • 虚拟主机(Shared Hosting)是一种将一台物理服务器划分为多个独立虚拟空间的托管服务,每个用户共享服务器资源,并拥有独立的网站运行环境。评判“最好”的虚拟主机不能只看单一指标,而应结合性能、稳定性、客户支持、安
    2026-10-03 虚拟主机 8535浏览
友情链接
底部分割线