Fórum Inserir texto aleatório no button? #467408
20/01/2014
0
Boa tarde, estou desenvolvendo em java para android e preciso fazer algo assim
Queria saber se tem uma forma de ser preenchido aleatoriamente estes setText dos botões conforme as variáveis da classe db.
Assim
depois mudar assim
Etc.
Estou tentando fazer uma rotina assim
Mais ai não da certo, repete muito os nomes, não queria que repetisse.
Alguma ideia?
Obrigado
Queria saber se tem uma forma de ser preenchido aleatoriamente estes setText dos botões conforme as variáveis da classe db.
Assim
botao1.setText(db.nome1); botao2.setText(db.nome4); botao3.setText(db.nome2); botao4.setText(db.nome3);
depois mudar assim
botao1.setText(db.nome4); botao2.setText(db.nome3); botao3.setText(db.nome2); botao4.setText(db.nome1);
Etc.
Estou tentando fazer uma rotina assim
private void sorteioNome() {
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(0, db.nome1);
hm.put(1, db.nome2);
hm.put(2, db.nome3);
hm.put(3, db.nome4);
Random gera1 = new Random();
int ng1 = gera1.nextInt(4);
Random gera2 = new Random();
int ng2 = gera2.nextInt(3);
Random gera3 = new Random();
int ng3 = gera3.nextInt(2);
Random gera4 = new Random();
int ng4 = gera4.nextInt(1);
botao1.setText(hm.get(ng1));
botao2.setText(hm.get(ng2));
botao3.setText(hm.get(ng3));
botao4.setText(hm.get(ng4));
}Mais ai não da certo, repete muito os nomes, não queria que repetisse.
Alguma ideia?
Obrigado
Adriano Dolce
Curtir tópico
+ 0
Responder
Posts
21/01/2014
Adriano Dolce
Não sei se ajudaria, mais em delphi o codigo seria este
Preciso em java fazer este codigo
Obrigado.
procedure TForm1.Button5Click(Sender: TObject);
var
Arr: array [1 .. 4] of String;
i: Integer;
procedure Swap(var A, B: String);
var
Temp: String;
begin
Temp := A;
A := B;
B := Temp;
end;
begin
Randomize;
// popula o array
Arr[1] := 'Maria';
Arr[2] := 'João';
Arr[3] := 'José';
Arr[4] := 'Ana';
// embaralha
for i := Low(Arr) to High(Arr) do
Swap(Arr[i], Arr[Random( High(Arr)) + 1]);
// seta o caption dos botões
Button1.Caption := Arr[1];
Button2.Caption := Arr[2];
Button3.Caption := Arr[3];
Button4.Caption := Arr[4];
end;Preciso em java fazer este codigo
Obrigado.
Responder
Gostei + 0
21/01/2014
Adriano Dolce
Pessoal consegui resolver, meio meu estilo de programar em delphi, talvez seja gambiarra, mais pra mim funcionou, ja que não sei bem o java.
Como os valores vem de uma tabela fiz assim na classe DataBaseHelper, e aqui eu aplico o RANDOM direto na tabela.
//*********************************************
E na activity chamo o método assim
Foi a forma que encontrei para conseguir fazer meu app funcionar, fica ai a dica caso alguém tenha a mesma duvida. Mais como disse não sou expert em java, por isso fiz desta maneira ai.
Como os valores vem de uma tabela fiz assim na classe DataBaseHelper, e aqui eu aplico o RANDOM direto na tabela.
public List<String> abrirImagemClienteBanco() {
byte[] imagem = null;
/** deixa todos os campos ja_gravados = N */
updateClientes();
/** cria uma lista de dados dos clientes */
List<String> list = new ArrayList<String>();
Cursor cursor = dbQuery.rawQuery(
"SELECT * FROM clientes WHERE ja_utilizado <> \"S\" "
+ " AND serie_cli = 1 ORDER BY RANDOM() limit 4 ",
null);
if (cursor.moveToFirst()) {
cursor.moveToFirst();
do {
list.add(cursor.getString(1));
/**Fazemos um updates deixando o campo = S*/
updateClienteJafoi(cursor.getInt(0));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
/** aqui só mostra os que ja foi utilizado para capturar a foto */
Cursor cs = dbQuery
.rawQuery(
"SELECT * FROM clientes WHERE ja_utilizado = \"S\" "
+ " AND serie_cli = 1 ORDER BY RANDOM() limit 1 ",
null);
if (cs.getCount() > 0) {
cs.moveToFirst();
/** Captura imagem */
imagem = cs
.getBlob(cs.getColumnIndex("img_cliente"));
/** Captura nome do cliente */
nomeClienteSorteado = cs.getString(cs
.getColumnIndex("nome_clliente"));
/** Captura codigo do cliente */
codigoCli = cs.getInt(cs.getColumnIndex("_id"));
}
cs.close();
ByteArrayInputStream imageStream = new ByteArrayInputStream(imagem);
theImage = BitmapFactory.decodeStream(imageStream);
}
return list;
}
public void updateClientes() {
ContentValues values = new ContentValues();
values.put("ja_utilizado", "N");
dbQuery.update("clientes", values, null, null);
}
public void updateClienteJafoi(long codigo) {
ContentValues values = new ContentValues();
values.put("ja_utilizado", "S");
dbQuery.update("clientes", values, "_id = ?",
new String[] { codigo + "" });
}//*********************************************
E na activity chamo o método assim
private void visualizarImagemClie() {
/** imagem do banco de dados */
imgMainCliente.setImageBitmap(db.theImage);
/**limpo os botões a cada passada para o if */
botao1.setText("");
botao2.setText("");
botao3.setText("");
botao4.setText("");
/** Lista todos os clientes */
List<String> nomeClientes = db.abrirImagemClienteBanco();
StringBuilder sb = new StringBuilder();
sb.append("Clientes Sorteados:\n");
for (String name : nomeClientes) {
sb.append(name + "\n");
/** Aqui um eninhado de if para popular com os nomes sorteados, no caso 4 nomes */
if (botao1.getText().equals("")) {
botao1.setText(name.toString());
} else if (botao2.getText().equals("")) {
botao2.setText(name.toString());
} else if (botao3.getText().equals("")) {
botao3.setText(name.toString());
} else if (botao4.getText().equals("")) {
botao4.setText(name.toString());
}
}
//output.setText(sb.toString());
// ImageView.
imgMainCliente.setImageBitmap(db.theImage);
}Foi a forma que encontrei para conseguir fazer meu app funcionar, fica ai a dica caso alguém tenha a mesma duvida. Mais como disse não sou expert em java, por isso fiz desta maneira ai.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)