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

如何正确获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:09:30