Calcular Idade

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

}

}

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.

2 curtidas

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!

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.

Bom Acredito que seja a caracteristica do Cliente sua idade.

Mas então devo criar um metodo para fazer isso

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!

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.

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;

}

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() ;
}

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){
    this.id = 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){
    this.id = 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 ;
    

    }

}

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

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.