首页 > 解决方案 > 无法生成固定大小的字母数字符号字符串

问题描述

如果用户没有自己的密码想法,我正在构建一个应用程序,该应用程序会为用户建议一个强密码。这个想法是用户选择密码的大小(4个单选按钮),密码特征(4个复选框)和点击生成。基于此选择,我正在尝试生成一个随机字符串:

private String generatedPassword(){
    int length = 0;
    StringBuilder generatedString = new StringBuilder();
    Random rand = new Random();

    if(radio4.isSelected()){length = 4;}
    else if(radio8.isSelected()){length = 8;}
    else if(radio12.isSelected()){length = 12;}
    else if(radio16.isSelected()){length = 16;}

    if(passwordABCD.isSelected()){totalCharacters += capitalLetters;}
    if(passwordabcd.isSelected()){totalCharacters += lowercaseLetters;}
    if(password0123.isSelected()){totalCharacters += numbers;}
    if(passwordSymbols.isSelected()){totalCharacters += characters;}

    char[] text = new char[length];

    for(int i = 0; i < length; i++){text[i] = totalCharacters.charAt(rand.nextInt(length));}

    for (char c : text) { generatedString.append(c); }

    return generatedString.toString();
}

并在用户单击“生成”时设置此字符串的 EditText

GenerateDialog(@NonNull Context context) {
    super(context, android.R.style.Theme_NoTitleBar_Fullscreen);
    setContentView(R.layout.dialog_layout);

    ...

    generatePassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            passwordEditText.setText(generatedPassword());
        }
    });

    ...
}

但不幸的是,在“passwordEditText编辑文本”字段中什么都看不到。

标签: javaandroid

解决方案


尝试isChecked()在按钮上使用方法而不是isSelected().

此外,您可能希望通过删除不必要的char[]数组来简化代码,而是执行以下操作:

for (int i = 0; i < length; i++) {
   generatedString.append(totalCharacters.charAt(rand.nextInt(totalCharacters.length()));
}

推荐阅读