如何正确获取EditText输入的毫秒时间值并存入long类型变量?
问题原因
你代码报错的核心原因是类型不匹配:edtInsertTime.getText()返回的是Editable对象,和long是完全不兼容的类型,无法直接赋值。
另外你初始写的private long TimeLeftInMillis = START_TIME_IN_MILLIS;也有逻辑问题:成员变量初始化时START_TIME_IN_MILLIS还没被赋值,默认值是0,后续你就算给START_TIME_IN_MILLIS赋了新值,TimeLeftInMillis也不会自动更新,会一直保持0。
正确实现步骤
- 第一步:从EditText中取出文本内容,转为字符串类型
- 第二步:对字符串做非空判断,避免空指针
- 第三步:将合法的数字字符串解析为long类型,同时捕获非数字输入导致的格式异常
- 第四步:给
START_TIME_IN_MILLIS赋值后,同步更新TimeLeftInMillis的值 - (可选优化)在布局文件中给对应EditText加数字输入限制,从源头避免非法输入
代码示例
首先是布局里的输入限制配置(可选但推荐):
<EditText android:id="@+id/edtInsertTime" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:hint="请输入毫秒级时间值"/>
然后是OnCreateView中的赋值逻辑:
// 取出输入内容并去除首尾空白字符 String inputContent = edtInsertTime.getText().toString().trim(); if (TextUtils.isEmpty(inputContent)) { edtInsertTime.setError("时间输入不能为空"); return; } try { // 解析字符串为long类型的毫秒值 START_TIME_IN_MILLIS = Long.parseLong(inputContent); // 必须重新给剩余时间赋值,否则它会一直是初始的0 TimeLeftInMillis = START_TIME_IN_MILLIS; } catch (NumberFormatException e) { // 捕获输入非数字的异常,给用户提示 edtInsertTime.setError("请输入合法的数字格式时间"); }
额外注意
如果你让用户输入的是秒/分钟单位的时间,不要直接把解析出来的值当毫秒用,要做单位换算:
- 输入单位是秒:
START_TIME_IN_MILLIS = Long.parseLong(inputContent) * 1000; - 输入单位是分钟:
START_TIME_IN_MILLIS = Long.parseLong(inputContent) * 60 * 1000;
内容的提问来源于stack exchange,提问作者RakibulB
相关产品推荐
相关产品推荐

