Creating a java string randomizer from an array Android -
i trying create password generator (random string generator) send database when use below code in activity app terminates error "java.lang.arrayindexoutofboundsexception: length=67; index=85" code should return random value character array using loop generate string.
package com.example.zakratcliffe.androidantitheft; import android.content.intent; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import java.util.random; public class profileactivity extends appcompatactivity { private textview textviewusername, textviewuseremail; private edittext texteditdescription, texteditpassword; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_profile); if (!sharedprefmanager.getinstance(this).isloggedin()) { finish(); startactivity(new intent(this, loginactivity.class)); } textviewusername = (textview) findviewbyid(r.id.textviewusername); textviewuseremail = (textview) findviewbyid(r.id.textviewuseremail); texteditdescription = (edittext) findviewbyid(r.id.edittextdescription); texteditpassword = (edittext) findviewbyid(r.id.edittextpassword); textviewuseremail.settext(sharedprefmanager.getinstance(this).getuseremail()); textviewusername.settext(sharedprefmanager.getinstance(this).getusername()); final button button = (button) findviewbyid(r.id.generate_button); button.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { string pass = generated_pass(); texteditpassword.settext(pass); } }); } string generated_pass(){ char[] genpass = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '@', '!', '?', '&', '%', '~'}; int = 1; string generatedpass = ""; while (i < 13){ random r = new random(); int character = r.nextint(66 - 0) + 66; system.out.println(genpass[character]); generatedpass = generatedpass + genpass[character]; i++; } return generatedpass; } public void sendtodb(view v){ } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.menu, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { switch(item.getitemid()){ case r.id.menulogout: sharedprefmanager.getinstance(this).logout(); finish(); startactivity(new intent(this, loginactivity.class)); break; } return true; } }
do
int character = r.nextint(66);
instead of
int character = r.nextint(66 - 0) + 66;
as "r.nextint(66-0) + 66" may generate random number between 0 66, , number 66 added, character has value more 66, inaccessible in array(has length 66), , hence exception arrayindexoutofboundsexception.
or make code robust, instead of hardcoding 66, use:
while (i < 13){ random r = new random(); int character = r.nextint(genpass.length); system.out.println(genpass[character]); generatedpass = generatedpass + genpass[character]; i++; } return generatedpass; }
Comments
Post a Comment