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
Enfim, meus métodos de enviar e receber mensagem:
public void mandarMensagem(String numero, String texto) {
receberMensagem(numero, texto);
}
public void receberMensagem(String numero, String texto) {
Conversa nova = new Conversa(telefone);
nova.adicionarConversa(numero, texto);
}
e meu método de adicionar na conversa, que está em outra classe:
public void adicionarConversa(String contato, String texto) {
Mensagem m = new Mensagem(contato, texto, hora);
listaMensagem.add(m);
gravarMensagem(m);
}
Porém percebi que não está adicionando minha mensagem no array… Podem me dizer o que está errado?
/*ArrayList de Mensagem;
String contato (telefone do outro participante da conversa);*/
private ArrayList<Mensagem> listaMensagem = new ArrayList<>();
private String contato;
/*Uma variável para indicar a data e hora em que o contato esteve online pela última vez (pode
ser alguma classe especializada do Java, String, etc).*/
private DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
private Date date = new Date();
private String hora = dateFormat.format(date);
public Conversa() {
}
public Conversa(String contato) {
this.contato = contato;
}
public ArrayList<Mensagem> getListaMensagem() {
return listaMensagem;
}
public String getContato() {
return contato;
}
public void setContato(String contato) {
this.contato = contato;
}
public String getHora() {
return hora;
}
/*Método para adicionar uma nova conversa, que recebe por parâmetro uma String identificando
quem foi o autor da mensagem e outra String que é o texto da mensagem em si.*/
public void adicionarConversa(String contato, String texto) {
Mensagem m = new Mensagem(contato, texto, hora);
listaMensagem.add(m);
gravarMensagem(m);
}
//Método para gravar mensagem
public void gravarMensagem(Mensagem m) {
try {
FileWriter arq = new FileWriter(contato + ".txt", true); //NOME do arquivo vai ser o numero + a extensão txt
PrintWriter gravar = new PrintWriter(arq); //gravando o arquivo
gravar.println(m); //gravando a mensagem
gravar.close();
} catch (IOException e) {
e.toString(); //pra saber se deu erro
}
}
/*Método para buscar AS CONVERSAS por uma PALAVRA CHAVE. O método deve receber
por parâmetro uma String com a palavra desejada, devendo retornar um ArrayList
de Mensagem com todas as mensagens que contenham a palavra passada por parâmetro.*/
public String buscarPalavraChave(String palavra) { //certo
String busca = "";
for (Mensagem mensagem : listaMensagem) {
if (mensagem.getTexto().contains(palavra)) {
busca += mensagem.toString() + "\n";
} else {
return "Nenhuma mensagem encontrada!";
}
}
return busca;
}
/*Método para retornar todas as mensagens da conversa, como ArrayList de Mensagem, para a
interface gráfica*/
public String listarConversas() { //mostrar todas conversas no array CERTO
StringBuilder s = new StringBuilder();
for (Mensagem mensagem : listaMensagem) {
s.append(mensagem);
s.append("\n\n");
}
return s.toString();
}
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…
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.
public void receberMensagem(String numero, String texto) {
//Conversa nova = new Conversa(telefone); //não será necessário criar um novo objeto
nova.adicionarConversa(numero, texto); //apenas adicionar a mensagem na "Conversa" já existente.
}
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.