Android C#密码生成应用报错:Convert.ToInt32转换字符串失败求助
解决Android密码生成应用中的字符串转换错误问题
作为有开发经验的Android新手,你遇到的问题核心是Android与WinForm对文本输入的处理逻辑差异,直接使用Convert.ToInt32()在空输入或非数字输入时会抛出格式异常,而你之前的WinForm场景可能隐性规避了这个问题。
错误的直接原因
在Android中,txtPassword(对应EditText控件)的默认文本是空字符串,当用户未输入任何内容就触发密码生成逻辑时,Convert.ToInt32("")会直接抛出FormatException;即使用户输入了非数字字符(比如字母、符号),同样会触发这个错误。而WinForm中你可能默认给TextBox设置了初始值(比如1),或者UI层面限制了输入类型,所以没遇到这个问题。
具体解决方案
我们可以通过安全的数字转换+输入合法性校验来解决,同时结合复选框的判断逻辑:
安全转换数字输入
放弃直接使用Convert.ToInt32(),改用int.TryParse()方法,它会尝试转换文本并返回是否成功,不会抛出异常:bool isLengthValid = int.TryParse(txtPassword.Text, out int _len);结合复选框与输入的双重校验
将复选框的选中判断和输入合法性校验结合,确保两个条件都满足后再执行生成逻辑:// 先检查是否至少选中一种字符类型 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); // 你的生成方法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




