Nano Hash - криптовалюты, майнинг, программирование

Не удается получить сообщения чата в Android с помощью XMPP и aSmack

Я пишу чат-клиент на Android с использованием протокола XMPP. Я использовал файл asmack.jar, предоставленный http://asmack.freakempire.de/. Реализация работает на простой Java (с использованием smack.jar), которую я тестировал. Но в Android я могу только отправлять сообщения другому клиенту (он использует пиджин) и не могу получать от него сообщения. Приложение успешно подключается к серверу, входит в систему и появляется в сети, но просто не получает никаких сообщений.

Мой processMessage() никогда не вызывается, как и chatCreated(), когда сообщение отправляется моему клиенту.

Мой класс активности:

package com.example.basicchat;

import org.jivesoftware.smack.AndroidConnectionConfiguration;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.SmackAndroid;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SmackAndroid.init(this);
        MainActivity2 xmppClient= new MainActivity2("jabber.org", 5222);
        try {
            xmppClient.login();
        } catch (XMPPException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

        public class MainActivity2 implements MessageListener, ChatManagerListener, ConnectionListener {


        private String    server;
        private int        port;
        public MainActivity2( String server, int port )
    {
        super();

        this.server = server;
        this.port = port;
    }
        private XMPPConnection    connection    = null;

        public void login() throws XMPPException
        {
            String username = "my_user";
            String password = "xxxxxxxx";
            login(username, password);

        }

        private void login(String userName, String password) throws XMPPException
        {
           AndroidConnectionConfiguration config = new AndroidConnectionConfiguration(server,
                    port);
            connection = new XMPPConnection(config);
            connection.connect();
            connection.addConnectionListener(this);
            connection.login(userName, password);
            ChatManager chatManager = connection.getChatManager();
            chatManager.addChatListener(this);
            Toast.makeText(MainActivity.this,"listener set", Toast.LENGTH_SHORT).show();
           // sendMessage("helloooo","[email protected]"); /* this mssg is sent */
        }

        private void sendMessage(String message, String to) throws XMPPException
        {
            Chat chat = connection.getChatManager().createChat(to, this);
            chat.sendMessage(message);
        }

        public void disconnect()
        {
            connection.disconnect();
        }

        /** never gets called **/
        @Override
        public void processMessage(Chat chat, Message message)
        {
            /*********** Handle Request and construct response ******************/
            Toast.makeText(MainActivity.this,"mssg: "+message.getBody(), Toast.LENGTH_SHORT).show();
            switch (message.getType())
            {
            case chat:
                String jsonData = (null==message.getBody())?"":message.getBody();

                System.out.println(jsonData);
                break;
            case error:
                break;
            case groupchat:
                break;
            case headline:
                break;
            case normal:

                break;
            }
        }
        @Override
        public void chatCreated(Chat arg0, boolean arg1) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this,"Chat Created!", Toast.LENGTH_SHORT).show();
            if (!arg1)
                arg0.addMessageListener(this);

        }
        @Override
        public void connectionClosed() {
            // TODO Auto-generated method stub

        }
        @Override
        public void connectionClosedOnError(Exception arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void reconnectingIn(int arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void reconnectionFailed(Exception arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void reconnectionSuccessful() {
            // TODO Auto-generated method stub

   }

    }

}

Файл манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.basicchat"
    android:versionCode="1"
    android:versionName="1.0" >

 <uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
         >

        <activity
            android:name="com.example.basicchat.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
    </application>

</manifest>

  • Также вставьте свои журналы XMPP. 18.07.2013
  • У меня точно такая же проблема... кто-нибудь может помочь мне, пожалуйста???? 08.11.2015

Ответы:


1

Вы должны реализовать класс MessageListener, чтобы MainActivity мог получать сообщения чата.

17.12.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..