Problem receiving messages inside a activity with Smack 4.1.0

Hi, I’m trying to start a chat inside a activity in Android, the idea is to open the connection and start sending e receiving messagem only when the activity is open, to test I send messages to a user in Spark, but I’m having problems, I can send the messages, but only sometimes I can receive then, I don’t know why works only sometimes and neither the conditions, above the entire code of the activity, I created the chatlistener in the overrided method run(), I posted the entire code just in case the problem is in another place.

If someone could help

package com.julio.languagechat;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.os.Handler;

import android.preference.PreferenceManager;

import android.view.View;

import android.view.inputmethod.InputMethodManager;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import com.facebook.widget.ProfilePictureView;

import org.jivesoftware.smack.AbstractXMPPConnection;

import org.jivesoftware.smack.chat.Chat;

import org.jivesoftware.smack.chat.ChatManager;

import org.jivesoftware.smack.chat.ChatMessageListener;

import org.jivesoftware.smack.packet.Message;

public class ChatTela extends Activity implements Runnable {

private Handler handler = new Handler();

private EditText edtMensagem;

private Button btnEnviarMensagem;

private TextView txtConversa;

private Button btnPerfil;

private ProfilePictureView fotoPerfil;

private TextView txtNome;

private int nUsuarioID = 0;

private Usuario usuario;

private String sMeuUsuario;

private String sUsuario;

private String sSenha;

String conversa = “”;

String mensagem = “”;

AbstractXMPPConnection con;

Chat newchat;

ChatManager chatManager;

public ChatTela() {

// Required empty public constructor
}

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.chat_tela);

Intent intent = getIntent();

Bundle params = intent.getExtras();

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

sMeuUsuario = preferences.getString(“Nome”, “”);

if(params!=null){

nUsuarioID = params.getInt(“id”,0);

}

edtMensagem = (EditText) findViewById(R.id.edtMensagem);

btnEnviarMensagem = (Button) findViewById(R.id.btnEnviarMensagem);

txtConversa = (TextView) findViewById(R.id.txtConversa);

btnPerfil = (Button) findViewById(R.id.btnperfilusuario);

fotoPerfil = (ProfilePictureView) findViewById(R.id.chat_profile_pic);

txtNome = (TextView) findViewById(R.id.txt_user_name);

btnEnviarMensagem.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

conversa = “”;

conversa = edtMensagem.getText().toString();

EnviarMensagem(conversa);

if(edtMensagem.getText().toString() == “”){

conversa = sMeuUsuario + " - Escreveu: " + conversa;

}else{

conversa = “\n” + sMeuUsuario + " - Escreveu: " + conversa;

}

txtConversa.append(conversa);

edtMensagem.setText("");

InputMethodManager imm = (InputMethodManager)getSystemService(

Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(edtMensagem.getWindowToken(), 0);

}

});

final Context context = this;

btnPerfil.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

Intent i = new Intent(context,PerfilAmigo.class);

Bundle params = new Bundle();

params.putInt(“id”,nUsuarioID);

i.putExtras(params);

startActivity(i);

}

});

sUsuario = preferences.getString(“UserXMPP”, “”);

sSenha = preferences.getString(“SenhaXMPP”, “”);

SmackCon smackCon = new SmackCon();

con = smackCon.ConectarSmack(sUsuario, sSenha);

new Thread(this).start();

}

@Override
protected void onDestroy() {

super.onDestroy();

newchat.close();

con.disconnect();

}

private void EnviarMensagem(String sMensagem){

SmackCon smackCon = new SmackCon();

String sSend = usuario.UserXMPP;

try {

System.out.println("Message sent: " + sMensagem);

newchat.sendMessage(sMensagem);

}

catch (Exception e) {

System.out.println(“Error Delivering block”);

}

}

@Override
public void run() {

WSCon wsCon = new WSCon();

try {

usuario = wsCon.BuscaUsuario(nUsuarioID);

handler.post(new Runnable() {

@Override
public void run() {

txtNome.setText(usuario.Nome);

fotoPerfil.setProfileId(usuario.FacebookID);

}

});

}catch (Exception e) {

}

chatManager = ChatManager.getInstanceFor(con);

newchat = chatManager.createChat(usuario.UserXMPP + “@languagechat”, new ChatMessageListener() {

@Override
public void processMessage(Chat chat, Message message) {

conversa = “”;

if(edtMensagem.getText().toString() == “”){

conversa = txtNome.getText() + " - Escreveu: " + conversa;

}else{

conversa = “\n” + txtNome.getText() + " - Escreveu: " + conversa;

}

mensagem = conversa + message.getBody();

handler.post(new Runnable() {

@Override
public void run() {

txtConversa.append(mensagem);

System.out.println("Received message: " + mensagem);

}

});

}

});

}

}