1

プロジェクトで aSmack を機能させようとしています。Eclipse で標準プロジェクトを作成し、ビルド パス / ライブラリに jar を追加しました。XMPP クラスの使用を開始しましたが、動作していないため、プロジェクトを適切にセットアップするために他に何かする必要があるかどうかはわかりません (後で)。でServiceを起動しAsnycTaskて Google トークに接続し、チャット メッセージを 1 つ送信します。

conn1 = new XMPPConnection(config);
// connecting to the server
try {
    conn1.connect();
    Log.v(LOG_TAG, "XMPP connected");
} catch (XMPPException xe) {
    msg = "XMPPException during connect(): " + xe.getMessage();
    Log.v(LOG_TAG, msg);
}

// login
try {
    conn1.login(USERNAME, PASSWORD, RESOURCE);
    msg = "login ok";
    Log.v(LOG_TAG, msg);
} catch (XMPPException xe) {
    msg = "XMPPException login(): " + xe.getMessage();
    Log.v(LOG_TAG, msg);

    StackTraceElement[] st = xe.getStackTrace();
    for (int i = 0; i<st.length; i++) { 
        msg = xe.getStackTrace()[i].toString();
        Log.v(LOG_TAG, msg);
    }
}

// creating a chat and sending messages
try {
     ChatManager chatmanager = conn1.getChatManager();
     msg = "creating chat";
     Log.v(LOG_TAG, msg);
     Chat chat = chatmanager.createChat(BUDDY_ADDRESS, new MessageListener() {

        @Override
        public void processMessage(Chat chat, Message message) {
            String msg = "incoming chat: " + message;
            Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG);
            Log.v(LOG_TAG, msg);
        }
    });
    chat.sendMessage("ahoj");
} catch (XMPPException xe) {
    msg = "XMPPException during connect(): " + xe.getMessage();
    Log.v(LOG_TAG, msg);
}

(私のばかげた例外処理を見落としてください。私はまだ学習中です :-) connect() メソッドは例外をスローしないため、動作するはずですが、Logcat では、「XMPP 接続済み」メッセージの前にエラーが発生します。 、次に login() メソッドによってスローされる例外:

03-01 15:13:19.970: WARN/System.err(4465): stream:error (text)
03-01 15:13:19.970: WARN/System.err(4465):     at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:261)
03-01 15:13:19.970: WARN/System.err(4465):     at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
03-01 15:13:19.975: WARN/System.err(4465):     at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:71)
03-01 15:13:24.640: DEBUG/dalvikvm(3089): GC_EXPLICIT freed 610 objects / 39760 bytes in 216ms
03-01 15:13:26.370: DEBUG/NetworkLocationProvider(2020): onDataConnectionStateChanged 3
03-01 15:13:26.380: DEBUG/MobileDataStateTracker(2020): replacing old mInterfaceName (pdp0) with pdp0 for hipri
03-01 15:13:26.395: DEBUG/MobileDataStateTracker(2020): replacing old mInterfaceName (pdp0) with pdp0 for supl
03-01 15:13:26.400: DEBUG/MobileDataStateTracker(2020): default Received state= CONNECTED, old= CONNECTED, reason= (unspecified), apnTypeList= default,supl
03-01 15:13:31.570: DEBUG/dalvikvm(2806): GC_EXPLICIT freed 173 objects / 10752 bytes in 207ms
03-01 15:13:34.550: VERBOSE/Smacktest_01(4465): XMPP connected
03-01 15:13:36.600: DEBUG/dalvikvm(2583): GC_EXPLICIT freed 1551 objects / 87688 bytes in 236ms
03-01 15:13:39.580: VERBOSE/Smacktest_01(4465): XMPPException login(): No response from the server.
03-01 15:13:39.585: VERBOSE/Smacktest_01(4465): org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:73)
03-01 15:13:39.605: VERBOSE/Smacktest_01(4465): org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:369)
03-01 15:13:39.605: VERBOSE/Smacktest_01(4465): org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:230)
03-01 15:13:39.620: VERBOSE/Smacktest_01(4465): com.biroalex.smacktest_01.SmackTest_01Service$AsyncXMPPConn.doInBackground(SmackTest_01Service.java:105)
03-01 15:13:39.620: VERBOSE/Smacktest_01(4465): com.biroalex.smacktest_01.SmackTest_01Service$AsyncXMPPConn.doInBackground(SmackTest_01Service.java:1)
03-01 15:13:39.635: VERBOSE/Smacktest_01(4465): android.os.AsyncTask$2.call(AsyncTask.java:185)
03-01 15:13:39.640: VERBOSE/Smacktest_01(4465): java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-01 15:13:39.655: VERBOSE/Smacktest_01(4465): java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-01 15:13:39.655: VERBOSE/Smacktest_01(4465): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-01 15:13:39.660: VERBOSE/Smacktest_01(4465): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-01 15:13:39.665: VERBOSE/Smacktest_01(4465): java.lang.Thread.run(Thread.java:1096)
03-01 15:13:39.705: VERBOSE/Smacktest_01(4465): creating chat

だから問題は:)私が何か間違ったことをしている場合、またはaSmack libがAndroidのユーザーになるようにプロジェクトが適切に準備されていない場合は?

aSmack の作者の github https://github.com/rtreffer/asmackでは、ビルド環境について言及していますが、これは私にとって完全に中国語です。新しいビルド環境を作成しますか? それ、どうやったら出来るの?

お待ちいただいてありがとうございます!

4

4 に答える 4

1

IIRC smack で gtalk を使用する場合は、ユーザー名として完全な JID を指定する必要があります: user@gmail.com

于 2011-08-21T19:00:13.690 に答える
0

Google トークはポーリング モードでのみ動作しているようです: http://credentiality2.blogspot.com/2010/03/xmpp-asmack-android-google-talk.html

于 2011-03-01T14:28:32.747 に答える
0

この質問を見て、答え、またはこの例外を受け取ったときにうまくいった答えを見つけました。接続を作成するときは、次のようにします。

    ConnectionConfiguration config = new ConnectionConfiguration(SERVER_HOST, SERVER_PORT);
    config.setTruststoreType("BKS");

それが役に立てば幸い :)

于 2012-08-01T12:37:22.813 に答える
0

私のコードは他のオープン XMPP プロバイダーで動作するようです。そのため、おそらく私のコードにもビルド環境などにも重大なエラーはなく、おそらく aSmack lib にもエラーはありません:) Google に接続しようとするとどうなりますか? 質問は今のところ無効です。

于 2011-03-03T07:32:10.703 に答える