Quantcast
Channel: Ignite Realtime : Unanswered Discussions - Support
Viewing all articles
Browse latest Browse all 4979

Problem receiving messages inside a activity with Smack 4.1.0

$
0
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);

            }

       });

 

 

  }

  });

 

  }

 

}


Viewing all articles
Browse latest Browse all 4979

Trending Articles