Calcular Idade

11 respostas
M

Primeiramente Pessoal, Boa Noite.
Estou começando agora com a programação no Android Studio, tem um conhecimento médio com o Php.

Então,
estou desenvolvendo um app como trabalho da faculdade ja esta bem
adiantado, mas tem uma situação muito complicada que não estou
conseguindo faze, vejam:

Salvo no banco um campo Tipo String no seguinte modelo: dd/mm/aaaa, vindo de um datapicker.

E retorno esses dados em um ListView, até aqui esta funcionando.

Mas devo retornar neste ListView a Idade do cadastrado com base na sua data de nascimento e não devo mostrar a sua data de nascimento igual estou fazendo.

Se Alguem entendeu e puder me dar uma luz.

Agradeço muito!

Se precisarem de mais informações como codigo, etc podem pedir.

Esse codigo é onde monto o listView

package br.com.marcosoliveira.cadastroclientenovo;

import android.content.Intent;

import android.os.Bundle;

import android.support.design.widget.FloatingActionButton;

import android.support.design.widget.Snackbar;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.Toolbar;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import java.util.List;

public class ActListaClientes extends AppCompatActivity {

//montando a lista pelo banco
private ListView lvClientesBanco;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_lista_clientes);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //criando Lista DEmostração
    //String [] itens = {"Ciclano - 60", "Fulano - 80", "Jodinando - 23", "Paula - 45", "Anísio - 34", "Filipa - 12"};
    //ListView list = (ListView) findViewById(R.id.listaClientes);
    //list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itens));

    lvClientesBanco = (ListView) findViewById(R.id.listaClientes);



}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_act_lista_clientes, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.mnNovoActLista) {

        //Toast.makeText(this,"Novo Cliente",Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this,ActCadastroCliente.class);
        startActivity(intent);
        return true;
    }
    if (id == R.id.mnSairActLista) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
protected void onResume() {
    super.onResume();


    DbHelper dbHelper = new DbHelper(this);
    List<Cliente> listaClientes = dbHelper.selectTodosClientes();

    ArrayAdapter<Cliente> adp = new ArrayAdapter<Cliente>(this,android.R.layout.simple_list_item_1,listaClientes);
    lvClientesBanco.setAdapter(adp);

}

}

11 Respostas

I

Então você precisar pega uma data de nascimento ex: 09/09/1990, comparar com a data atual, e partir dai obter a idade, certo ?
Você pode usar o joda time.

String primeiroAno = “09/09/1990”;
String segundoAno = “09/09/2016”;
DateTimeFormatter dformat = DateTimeFormat.forPattern(“dd/MM/yyyy”);
DateTime primeiroAnoFormatado = DateTime.parse(primeiroAno, dformat);
DateTime segundoAnoFormatado = DateTime.parse(segundoAno, dformat);
int year = Years.yearsBetween(primeiroAnoFormatado, segundoAnoFormatado).getYears();

Talvez tenha algum erro de sintaxe, fiz na mão aqui.

M

Ola Amigo,
Estou com uma dúvida devo usar esses codigos dentro do objeto(classe) cliente?

Ou tenho que usar no toString

Estou perdido…
Não sei nem por onde começar!

I

Voce que tem que se perguntar, pelo código que vc ta vendo, ele se encaixa como caracterisca de um cliente ?
Usar no toString ? ham.

M

Bom Acredito que seja a caracteristica do Cliente sua idade.

Mas então devo criar um metodo para fazer isso

M

Eu estou usando o ToString e por que chamo ele para imprimir no ListView
Como não tenho conhecimento mas se tiver outro modo de faze e puder me ensinar.
Muito obrigado pelas dicas!

I

Você pode deixar esse método como um auxiliar, que recebe as duas datas, e retorna um int com as diferença delas.
A partir da ai, você tem um valor, que você pode criar mais uma propriedade no seu objeto e colocar ele.
Entendi do toString por causa do seu adaptador.

M

Coloqei desse jeito igual um amigo esta tentando me ajudar, mas fica dando erro "Cannot Resolve Symbol"
No LocalDate, Day, month e period

@Override
public String toString () {

String[] date = getDtNascimento().split("/");

int dia = Integer.valueOf(date[0]);
int mes = Integer.valueOf(date[1]);
int ano = Integer.valueOf(date[2]);

LocalDate birthday;
birthday = LocalDate.of(ano, Month.of(mes), day);

//...
int idade = period.getYears();



return  "  NOME: " + nome +
        "  IDADE: " + genero;

}

M

Estou tentando faze assim criei um metodo para retornar a idade.

Usei a classe calendar

Mas o programa quando roda da um erro e fecha a aplicação.

public int getIdade (){

String[] date = getDtNascimento().split("/");

   int dia = Integer.valueOf(date[0]);
   int mes = Integer.valueOf(date[1]);
   int ano = Integer.valueOf(date[2]);

   Calendar c = Calendar.getInstance();
   int anoA = c.get(Calendar.YEAR);
   int mesA = c.get(Calendar.MONTH)+1;
   int diaA = c.get(Calendar.DAY_OF_MONTH);




   int idade = anoA -ano;

   return idade;

}

@Override
public String toString () {

    return  "  NOME: " + nome +
            "  IDADE: " + getIdade() ;
}
M

Vou postar a classe completa para vocês olharem o que esta acontecendo na classe toda…

A resposta no listView O nome correto e a idade 0

package br.com.marcosoliveira.cadastroclientenovo;

import android.widget.Toast;

import java.security.PublicKey;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

/**

  • Created by marcos on 09/04/16.
    
    */
    
    public class Cliente  {
    
    private int id;
    
    private String nome;
    
    private String telefone;
    
    private String cpf;
    
    private String dtNascimento;
    
    private String genero;
    
    private int idade;
    

    public Cliente (){}

    public Cliente (int id, String nome, String telefone, String cpf, String dtNascimento, String genero, int idade){
    
    <a href="http://this.id">this.id</a>             = id;
    
    this.nome           = nome;
    
    this.telefone       = telefone;
    
    this.cpf            = cpf;
    
    this.dtNascimento   = dtNascimento;
    
    this.genero         = genero;
    
    this.idade          = idade;
    
    }
    
    public int getId(){
    
    return id;
    
    }
    
    public void setId(int id){
    
    <a href="http://this.id">this.id</a> = id;
    
    }
    
    public String getNome(){
    
    return nome;
    
    }
    
    public void setNome(String nome){
    
    this.nome = nome;
    
    }
    
    public String getTelefone(){
    
    return telefone;
    
    }
    
    public void setTelefone(String telefone){
    
    this.telefone = telefone;
    
    }
    
    public String getCpf(){
    
    return cpf;
    
    }
    
    public void setCpf(String cpf){
    
    this.cpf = cpf;
    
    }
    
    public String getDtNascimento(){
    
    return  dtNascimento;
    
    }
    
    public void setDtNascimento(String dtNascimento){
    
    this.dtNascimento = dtNascimento;
    
    }
    
    public String getGenero(){
    
    return genero;
    
    }
    
    public void setGenero (String genero){
    
    this.genero = genero;
    
    }
    
    public  void setIdade (int idade){
    
    this.idade = getIdade();
    
    }
    
    public  int getIdade (){
    
    String[] date = getDtNascimento().split("/");
    
     int dia = Integer.valueOf(date[0]);
     int mes = Integer.valueOf(date[1]);
     int ano = Integer.valueOf(date[2]);
    
     Calendar c = Calendar.getInstance();
     int anoA = c.get(Calendar.YEAR);
     int mesA = c.get(Calendar.MONTH)+1;
     int diaA = c.get(Calendar.DAY_OF_MONTH);
    
     idade = anoA -ano;
    
    return idade;
    

    }

    @Override
    public String toString () {

    return  "  NOME: " + nome +
             "  IDADE: " + idade ;
    

    }

}

M

E ai amigos alguem tem alguma dica…
Obrigado a todos que ja contribuiram

I

Já te dei o código que calcula a idade, em tese está resolvido.
“a mais tá dando um erro”, primeiro, tem que colocar o erro né ? segundo, abre outro tópico.

Criado 19 de abril de 2016
Ultima resposta 23 de abr. de 2016
Respostas 11
Participantes 2