[Resolvido ]Capturar dados no formato DATA de uma TetxtView

Boa noite amigos,

Tenho uma TetxtView. que apliquei uma mascara no formato de data, assim o usuário insere uma data especifica no campo EX: 23/05/2021.
O problema é que preciso capturar os dados inseridos com a data separada em : dia, mês e ano. Tipo guardar este valores em uma variável.

Alguém pode ajudar?

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date data = format.parse(seuTextView.getText());

Só guardar a variável data em algum lugar.

Opa beleza amigo? Mas como capturo o mês em separado por exemplo: Se o usuário digitou: 26/05/2021 como pego na variável o dígito 05 , referente ao mês?

data.getDay()
data.getMonth()
data.getYear()

Show meu amigo! Vou testar e posto a solução…
Obrigado…

Amigo, não consegui utilizar: Primeiro pede para converter para : String.valueOff, depois persiste em erro em parse.

format.parse(seuTextView.getText().toString());

Qual erro deu no parse?

Parse fica sublinhado em vermelho, e seguindo a dica da plataforma manda modificar para: “Surround witch try/catch”.

Ah, sim.
O parse joga uma ParseException caso a String passada seja inválida.

Então pode seguir a dica do IDE e rodear com try/catch:

try {
    format.parse(seuTextView.getText().toString());
} catch (ParseException ex) {
    //String invalida foi passada, mostre uma mensagem de erro para o usuário ou algo assim.
}

Eu fiz aqui, sumiu o erro só que não jogou a mascara para o TextView.

Você disse que já tem uma máscara.
O código que passei é para pegar um texto e transformar em Date, para facilmente pegar o dia, mês e ano.

Explique melhor o problema.

Ah beleza amigo, tem razão… è que tinha retirado a mascara para teste. Desculpe os enganos… vou testar e dou o resultado…

1 curtida

Opa, realmente estou com dificuldades de resolver meu problema, estou postando o código para melhor visão:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    etNome = findViewById(R.id.etNome);
    etDataNascimento = findViewById(R.id.etDataNascimento);
    btProsseguir = findViewById(R.id.btProsseguir);

    SimpleMaskFormatter smf = new SimpleMaskFormatter("NN/NN/NNNN");
    MaskTextWatcher mtw = new MaskTextWatcher(etDataNascimento, smf);
    etDataNascimento.addTextChangedListener(mtw);

    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    Date data = null;
    try {
        data = format.parse(etDataNascimento.getText().toString());
    } catch (ParseException exception) {
        exception.printStackTrace();
    }

        int dia = data.getDay();
        int mes = data.getMonth();
        int ano = data.getYear();
        
      btProsseguir.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // capturando os dados inseridos:
            String nome = etNome.getText().toString();
           int dataNascimento = Integer.parseInt(etDataNascimento.getText().toString());

            //Criando a intent que vai iniciar a segunda activyt
            Intent intent = new Intent (getApplicationContext(), Activity2.class);

            // Passando dados pela intent:

            intent.putExtra("pegarNome", nome);
            intent.putExtra("pegarDataNascimento", dataNascimento);
            
            // Disparando a intent:
            startActivity(intent);

        }
    });
}

}

O problema é que não consigo capturar a date que o usuário vai adicionar e levar para a segunda Activity do jeito que está, só consigo se o usuário digitar apenas um digito (o primeiro) em relação a data.

2 problemas:

  1. Você está pegando a data antes da hora. O onCreate é chamado quando a activity está sendo criada, então o usuário não vai ter digitado ainda. Teria que ser dentro do onClick();
  2. Você tá fazendo um parseInt na data de nascimento, se tiver / dá erro, então é melhor usar o parse que eu falei, que é próprio pra datas.

Show amigo !!! Fiz como vc falou e funcionou perfeitamente… Obrigado pela dica de sempre.

" Aprendo e vencendo a cada dia"

Abraço a todos…

1 curtida