You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android C#密码生成应用报错:Convert.ToInt32转换字符串失败求助

解决Android密码生成应用中的字符串转换错误问题

作为有开发经验的Android新手,你遇到的问题核心是Android与WinForm对文本输入的处理逻辑差异,直接使用Convert.ToInt32()在空输入或非数字输入时会抛出格式异常,而你之前的WinForm场景可能隐性规避了这个问题。

错误的直接原因

在Android中,txtPassword(对应EditText控件)的默认文本是空字符串,当用户未输入任何内容就触发密码生成逻辑时,Convert.ToInt32("")会直接抛出FormatException;即使用户输入了非数字字符(比如字母、符号),同样会触发这个错误。而WinForm中你可能默认给TextBox设置了初始值(比如1),或者UI层面限制了输入类型,所以没遇到这个问题。

具体解决方案

我们可以通过安全的数字转换+输入合法性校验来解决,同时结合复选框的判断逻辑:

  1. 安全转换数字输入
    放弃直接使用Convert.ToInt32(),改用int.TryParse()方法,它会尝试转换文本并返回是否成功,不会抛出异常:

    bool isLengthValid = int.TryParse(txtPassword.Text, out int _len);
    
  2. 结合复选框与输入的双重校验
    将复选框的选中判断和输入合法性校验结合,确保两个条件都满足后再执行生成逻辑:

    // 先检查是否至少选中一种字符类型
    bool hasSelectedType = upper.Checked || lower.Checked || number.Checked || symbol.Checked;
    if (!hasSelectedType)
    {
        Toast.MakeText(this, "请至少选择一种密码字符类型", ToastLength.Short).Show();
        return;
    }
    
    // 再检查密码长度输入是否有效
    if (!int.TryParse(txtPassword.Text, out int _len) || _len <= 0)
    {
        Toast.MakeText(this, "请输入大于0的有效整数作为密码长度", ToastLength.Short).Show();
        return;
    }
    
    // 执行密码生成逻辑
    GeneratePassword(_len, upper.Checked, lower.Checked, number.Checked, symbol.Checked); // 你的生成方法
    
  3. UI层面提前限制输入类型(可选优化)
    在EditText的布局XML中设置输入类型为数字,从源头避免用户输入非数字内容:

    <EditText
        android:id="@+id/txtPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:hint="请输入密码长度"/>
    

这样处理后,既避免了转换异常,也给了用户清晰的错误提示,符合Android应用的交互规范。

内容的提问来源于stack exchange,提问作者WHoward

火山引擎 最新活动