Array list não mostra informações! [RESOLVIDO]

12 respostas
GuiCunha

Buenas galera,

To fazendo uma atividade aqui e to com um pequeno intrave. Fiz uma classe "Atendimentos" onde terão alguns atributos e também um "Cliente" e um "Usuário" estes dois estendem da classe pessoa. no main fiz um método para adicionar um novo atendimento.

public Atendimentos buildAtendimentos (Integer codigo, Date dataCad, Usuario usuario, Cliente cliente, String contatos, String ocorrencia) {
        Atendimentos atendimento = new Atendimentos();
        
        atendimento.setCodigo(codigo);
        atendimento.setDataCad(dataCad);
        atendimento.setUsuario(usuario);
        atendimento.setCliente(cliente);
        atendimento.setContatos(contatos);
        atendimento.setOcorrencia(ocorrencia);
        return atendimento;
    }
main.buildAtendimentos(1, data, null, null, "Contato 1", "Ocorrência 1");

Onde está como "null" é o cliente e o usuário, mais não sei como adicioná-los.

Após fiz um outro método para mostrar esse atendimento.

private void showAtendimento(){
        List<Atendimentos> atendimento = new ArrayList<>();
        for (Atendimentos atendimentos : atendimento) {
            System.out.println("Código atendimento: "+atendimentos.getCodigo());
            System.out.println("Data: "+atendimentos.getDataCad());
            System.out.println("Usuário: "+atendimentos.getUsuario());
            System.out.println("Cliente: "+atendimentos.getCliente());
            System.out.println("Contatos: "+atendimentos.getContatos());
            System.out.println("Ocorrência: "+atendimentos.getOcorrencia());
        }
    }

Porém não funciona, não mostra nada. A classe atendimentos está assim:

import java.util.Date;

public class Atendimentos {
    private Integer codigo;
    private Date dataCad;
    private Usuario usuario;
    private Cliente cliente;
    private String contatos;
    private String ocorrencia;

    /**
     * @return the codigo
     */
    public Integer getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the dataCad
     */
    public Date getDataCad() {
        return dataCad;
    }

    /**
     * @param dataCad the dataCad to set
     */
    public void setDataCad(Date dataCad) {
        this.dataCad = dataCad;
    }

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * @return the contatos
     */
    public String getContatos() {
        return contatos;
    }

    /**
     * @param contatos the contatos to set
     */
    public void setContatos(String contatos) {
        this.contatos = contatos;
    }

    /**
     * @return the ocorrencia
     */
    public String getOcorrencia() {
        return ocorrencia;
    }

    /**
     * @param ocorrencia the ocorrencia to set
     */
    public void setOcorrencia(String ocorrencia) {
        this.ocorrencia = ocorrencia;
    }
}

Alguém pode dar uma mão?

Desde já agradeço.

12 Respostas

R

private void showAtendimento(){ List<Atendimentos> atendimento = new ArrayList<>(); for (Atendimentos atendimentos : atendimento) { System.out.println("Código atendimento: "+atendimentos.getCodigo()); System.out.println("Data: "+atendimentos.getDataCad()); System.out.println("Usuário: "+atendimentos.getUsuario()); System.out.println("Cliente: "+atendimentos.getCliente()); System.out.println("Contatos: "+atendimentos.getContatos()); System.out.println("Ocorrência: "+atendimentos.getOcorrencia()); } }

Tem um pequeno detalhe nesse seu metodo show.

  1. Voce instancia uma nova lista, e itera ela nesse mesmo metodo, logo, voce esta iterando uma lista vazia.
  2. Voce precisa tirar essa declaracao: List atendimento = new ArrayList<>(); e usar a lista que esta em escopo global (da classe), a variavel que voce declara no corpo da classe e que é usada para preenchimento.

Abraços.

GuiCunha

Cara não entendi, pode dar um exemplo?

Tipo ali na hora de adicionar também tenho uma dúvida, tipo onde esta “null” teria que ter os valores do cliente e do usuário, mais eu naum sei como adiciona-los ali.

main.buildAtendimentos(1, data, null, null, "Contato 1", "Ocorrência 1");
R

Voce precisa passar o objeto cliente e do usuario em si, exemplo:

main.buildAtendimentos(1, data, cliente, usuario, "Contato 1", "Ocorrência 1");
GuiCunha

Hum, beleza, mais e quanto ao “showAtendimentos”… não mostrou nada ainda, naum consegui entender…

R

Eu tinha te falado meu ponto de vista de porque nao esta dando certo, na primeira mensagem.

AlexandreTLazaro

GuiCunha…não tem nda a ver com a seu problema aih mas soh pra deixa claro, estava vendo ali q sua classe está com o nome “Atendimentos”…classes sempre são no singular…blz?

GuiCunha

Cara seguinte essa classe tem que ter o nome no plural mesmo, pois não é apenas um atendimento e sim vários atendimentos relacionados a um mesmo processo… Blz.

R

GuiCunha, teoricamente ainda que tenha varios atendimentos, a classe deve ter nome singular, e o N atendimentos voce define em uma lista, o que o alex falou esta correto. Tipo, isso sao boas praticas, é bom segui-las, mas nao quer dizer que nao vai funcionar como voce ta fazendo, porem vai dificultar a manutencao futuramente.

AlexandreTLazaro

kra, mas mesmo q vc tenha vários atendimentos não quer dizer q vc vai ter q criar uma classe no plural, vc terá VÁRIOS OBJETOS e não várias classes…entende? Nome de classe sempre é no singular. Boas práticas do Java…

feharaujo

E ae tudo bem :smiley:
vamos la

primeiramente, voce precisa de uma classe Cliente e Usuario para voce poder listar os dados delas,
para apartir dai voce criar um objeto de cada uma para popular cada comos dados que deseja, certo ?
Exemplo:
(não sei se voce já criou)
Você nao postou sua classe Usuario e Cliente, mas vamos supor que sua classe usuario seja assim :

public class Usuario {

private String login;
private String senha;

//getters e setters

}

e sua classe Cliente

public class Cliente {
private String nome;
private String telefone;
private String endereco;

//getters e setters
}

Ai você terá sua class Main para iniciar o programa.
Na classe main você terá que criar um objeto de Cliente e Usuario e popular com eles os dados que deseja:

public class Main {
   public static void main(String[] args){
      Cliente cliente = new Cliente();
      Usuario usuario = new Usuario();

      cliente.setNome("felipe");
      cliente.setEndereco("rua bla bla");
      cliente.setTelefone("00000000");

     usuario.setLogin("felipelogin");
     usuario.setSenha("12345");
   }
}

Ai em main voce irá criar uma instancia de atendimento,… onde voce irá setar os demais dados, cliente e usuario.

public static void main(String[] args){
...
Atendimento atendimento = new Atendimento();
atendimento.setCliente(cliente);
atendimento.setUsuario(usuario);
//demais dados
}

certo ?

ai crie varias instancias de atendimento, atendimento1, atendimento2 , e etc, e crie uma lista de atendimentos, sempre populando a mesma lista.
Se voce chamar um metodo e dar toda vez um new List , vc estara criando uma lista nova e consequentemente vazia.
Entao no main mesmo

List<Atendimento> listaAtendimento = new ArrayList<Atendimento>(); listaAtendimento.add(atendimento1); listaAtendimento.add(atendimento2); E assim vai,

ai na hora de listar,
crie uma classe e um metodo somente para listar, receba por parametro a lista que voce criou a cima, e varra ela

private void showAtendimento(List<Atendimento> atendimento){  

        for (Atendimento atendimentos : atendimento) {  
            System.out.println("Código atendimento: "+atendimentos.getCodigo());  
            System.out.println("Data: "+atendimentos.getDataCad());  
            System.out.println("Cliente Nome: "+atendimentos.getCliente().getNome());  
            System.out.println("Cliente Telefone: "+atendimentos.getCliente().getTelefone());
            System.out.println("Cliente Endereco: "+atendimentos.getCliente().getEndereco());
            //mesma coisa para Usuario 
            System.out.println("Contatos: "+atendimentos.getContatos());  
            System.out.println("Ocorrência: "+atendimentos.getOcorrencia());  
        }  
    }

Estude mais orientação a objetos, nao deixe uma classe fazer tudo, separe elas, deixe cada uma com uma função especifica, e seus metodos dentro delas ainda mais especificos.
Lembre-se
Um objeto, pode conter outro objeto dentro dele, como no seu caso Atendimento pode ter usuario e cliente
E voce voce ter uma lista de objetos, que para cada Atendimento da sua lista, voce terá um usuario e um cliente,

Ficou mais claro ?
provavelmente terá erros de sintaxe ai em cima haha, mas acredito que já irá ajudar

blz ? Duvidas posta ae

Até mais, abraços

GuiCunha

Pode cre, vlw pela dica. :smiley:

GuiCunha

Pessoal consegui resolver. Criei uma classe container..

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class ContainerAtendimento {
    private static ContainerAtendimento container;
    
    private ContainerAtendimento(){
        this.atendimentos = new ArrayList&lt;&gt;();
    }
    
    public static ContainerAtendimento getInstance(){
        if (container == null) {
            container = new ContainerAtendimento();
        }
        return container;
    }
    
    private List&lt;Atendimentos&gt; atendimentos;

    public List&lt;Atendimentos&gt; getAtendimentos() {
        return atendimentos;
    }

    public boolean add(Atendimentos a) {
        return atendimentos.add(a);
    }

    public boolean addAll(Collection&lt;? extends Atendimentos&gt; clctn) {
        return atendimentos.addAll(clctn);
    }
}

no main eu fiz dois metodos o primeiro que é um build, para adicionar e tals e o segundo que é um show, para mostrar..

public Atendimentos buildAtendimentos (Integer codigo, Date dataCad, Usuario usuario, Cliente cliente, String contatos, String ocorrencia, TipoAtendimento tipoAtendimento) {
        Atendimentos atendimento = new Atendimentos();
        
        atendimento.setCodigo(codigo);
        atendimento.setDataCad(dataCad);
        atendimento.setUsuario(usuario);
        atendimento.setCliente(cliente);
        atendimento.setContatos(contatos);
        atendimento.setOcorrencia(ocorrencia);
        atendimento.setTipoAtendimento(tipoAtendimento);
        return atendimento;
    }
private void showAtendimento(){
        List&lt;Atendimentos&gt; atendimento = ContainerAtendimento.getInstance().getAtendimentos();
        for (Atendimentos atendimentos : atendimento) {
            System.out.println("Código atendimento: "+atendimentos.getCodigo());
            System.out.println("Data: "+atendimentos.getDataCad());
            System.out.println("Usuário: "+atendimentos.getUsuario());
            System.out.println("Cliente: "+atendimentos.getCliente());
            System.out.println("Contatos: "+atendimentos.getContatos());
            System.out.println("Ocorrência: "+atendimentos.getOcorrencia());
            System.out.println("Tipo atendimento: "+atendimentos.getTipoAtendimento());
        }
    }

Depois só adiciona..

ContainerAtendimento.getInstance().add(main.buildAtendimentos(1, data, null, null, "Contato 1", "Ocorrência 1", null));

e chama..

main.showAtendimento();
Criado 6 de março de 2013
Ultima resposta 6 de mar. de 2013
Respostas 12
Participantes 4