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