2011-03-01 57 views
1

我想在我的項目中做一個小工作。 在eclipse中創建了一個標準項目,添加了jar來構建路徑/庫。開始使用XMPP類,但我不確定是否還有其他事情我應該做,以便正確設置項目(稍後),因爲它不起作用。 在Service中,我開始AsnycTask連接到Google Talk併發送一條聊天消息。aSmack XMPP庫不工作

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中howewer,前「 XMPP連接」的消息,有一個錯誤,然後通過登錄()方法拋出的異常:

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,他提到了構建環境,這對我來說是完全中文的。我應該創建一個新的構建環境嗎?我怎麼做?

謝謝你的耐心等待!

+0

對於其他人:你也可以得到一個'流:錯誤(文本)'如果你加入一個房間兩次,見:http://community.igniterealtime.org/thread/35991 – 2013-03-19 13:01:22

回答

0

看來,我的代碼工作與其他開放XMPP提供商,所以可能沒有嚴重的錯誤,無論是在我的代碼,也沒有在我的構建環境或者其他什麼,最有可能不在aSmack lib中:) 我會試着找出當試圖連接到谷歌時會發生什麼,但問題現在是無效的。

0

看來,谷歌通話僅在輪詢模式下工作:http://credentiality2.blogspot.com/2010/03/xmpp-asmack-android-google-talk.html

+0

謝謝你,ASAP – 2011-03-02 07:56:00

+0

現在,我已經能夠檢查鏈接,似乎該解決方案只是在它接收聊天消息的方式不同。連接和登錄的方式與我所做的一樣,並且我的項目在登錄時已經失敗 - 可能在連接時可能有問題。 – 2011-03-02 14:15:20

+0

另一方面,在其他服務器上嘗試這個整個XMPP的事情是一個好的方法,也許谷歌對gtalk做了一些修改。 – 2011-03-02 14:16:20

0

我看到了這個問題,並發現,工作過的答案,或者至少一個當我得到這個異常。當你創建你的連接,像這樣做:

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

希望它能幫助:)