PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

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
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

Adriano Dolce

Responder

Posts

21/01/2014

Adriano Dolce

Não sei se ajudaria, mais em delphi o codigo seria este
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.
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar