Tenho um método de enviar mensagem que chama o método de receber mensagem que se encarrega de adicionar essa mensagem na conversa(arraylist). Confuso né KKK
Poderia mostrar o código completo? Ou pelo menos todas as partes que envolvem o ArrayList
I
izabella
Classe conversa: public class Conversa {
/*ArrayList de Mensagem;String contato (telefone do outro participante da conversa);*/privateArrayList<Mensagem>listaMensagem=newArrayList<>();privateStringcontato;/*Uma variável para indicar a data e hora em que o contato esteve online pela última vez (podeser alguma classe especializada do Java, String, etc).*/privateDateFormatdateFormat=newSimpleDateFormat("dd/MM/yyyy HH:mm:ss");privateDatedate=newDate();privateStringhora=dateFormat.format(date);publicConversa(){}publicConversa(Stringcontato){this.contato=contato;}publicArrayList<Mensagem>getListaMensagem(){returnlistaMensagem;}publicStringgetContato(){returncontato;}publicvoidsetContato(Stringcontato){this.contato=contato;}publicStringgetHora(){returnhora;}/*Método para adicionar uma nova conversa, que recebe por parâmetro uma String identificandoquem foi o autor da mensagem e outra String que é o texto da mensagem em si.*/publicvoidadicionarConversa(Stringcontato,Stringtexto){Mensagemm=newMensagem(contato,texto,hora);listaMensagem.add(m);gravarMensagem(m);}//Método para gravar mensagempublicvoidgravarMensagem(Mensagemm){try{FileWriterarq=newFileWriter(contato+".txt",true);//NOME do arquivo vai ser o numero + a extensão txtPrintWritergravar=newPrintWriter(arq);//gravando o arquivogravar.println(m);//gravando a mensagemgravar.close();}catch(IOExceptione){e.toString();//pra saber se deu erro}}/*Método para buscar AS CONVERSAS por uma PALAVRA CHAVE. O método deve receberpor parâmetro uma String com a palavra desejada, devendo retornar um ArrayListde Mensagem com todas as mensagens que contenham a palavra passada por parâmetro.*/publicStringbuscarPalavraChave(Stringpalavra){//certoStringbusca="";for(Mensagemmensagem:listaMensagem){if(mensagem.getTexto().contains(palavra)){busca+=mensagem.toString()+"\n";}else{return"Nenhuma mensagem encontrada!";}}returnbusca;}/*Método para retornar todas as mensagens da conversa, como ArrayList de Mensagem, para ainterface gráfica*/publicStringlistarConversas(){//mostrar todas conversas no array CERTOStringBuilders=newStringBuilder();for(Mensagemmensagem:listaMensagem){s.append(mensagem);s.append("\n\n");}returns.toString();}
}
A
Ant0ny
Acho que está tudo correto, por acaso o listarConversas() retorna uma String vazia?
I
izabella
Quando eu adiciono pelo método mandarMensagem, ele não adiciona, listarConeversas() retorna a string vazia.
Mas se eu adicionar diretamente pelo método adicionarConversa, listarConeversas() retorna a minha mensagem…
A
Ant0ny
Acho que entendi o problema, em receberMensagem você cria uma nova instância de Conversa e aí a mensagem enviada você salva dentro dessa instância, mas essa instância é criada toda vez que o método é chamado, ou seja, a cada mensagem enviada uma nova conversa é criada.
Acho que o que vai resolver isso aí é criar uma instância de conversa única na aplicação principal (método main), para que funcione corretamente. Assim, sempre que for adicionar uma mensagem, você adiciona nesse objeto Conversa instanciado no método main, e não ficar criando uma nova instancia toda hora que for adicionar uma conversa.
publicvoidreceberMensagem(Stringnumero,Stringtexto){//Conversa nova = new Conversa(telefone); //não será necessário criar um novo objetonova.adicionarConversa(numero,texto);//apenas adicionar a mensagem na "Conversa" já existente.}
Eu acho que assim resolve…
I
izabella
Não estou no computador agora, mas se eu fazer esse nova.adicionarConversa ele não vai dar erro? Pq no caso eu não tenho essa variável nova
A
Ant0ny
Nesse caso a variável nova ficaria dentro do método main da aplicação, que aí ele iria guardar todas as mensagens, ao invés de criar uma instância toda vez que o método fosse chamado e guardar a mensagem dentro dessa instância nova, você agora vai guardar as mensagens dentro de um único objeto, que ficará dentro da main(). Acho que na prático você entenderá melhor.
Fazendo isso quando você for imprimir todas as mensagens ele não vai retornar algo vazio.
I
izabella
No caso, o meu main é a interface gráfica. Poderia me mostrar como eu iria instanciar esse objeto no main, pq não entendi direito.
A
Ant0ny
Conversa nova = new Conversa(telefone)
Isso fica na main e a partir dela você vai cadastrar as mensagens nela.