2012-01-19 47 views
7

Tôi đã dành thời gian để thêm smack.providers trong thiết bị Android, được chọn bởi ứng dụng của tôi tốt. Tôi đã thêm iqProviders mặc định và extensionProviders, nhưng tôi tôi cũng đã thêm tùy chỉnh của tôi extensionProvider, đó là những điều sau:asmack - nhận tin nhắn XML tùy chỉnh ||

<extensionProvider> 
    <elementName>players</elementName> 
    <namespace>boxer:players</namespace> 
    <className>company.games.boxer.PlayerListProvider</className> 
</extensionProvider> 

Hãy để tôi cũng giới thiệu các lớp PlayerListProvider, mà hiện nay đang có chỉ để xem nếu nó sẽ được gọi (mà nó không) - Tôi sẽ thực hiện nó đầy đủ khi tôi biết nó được gọi, do đó ít nhất là một phần chức năng hoạt động:

import java.util.List; 
import java.util.Map; 

import org.jivesoftware.smack.packet.PacketExtension; 
import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider; 

import android.util.Log; 

@SuppressWarnings("deprecation") 
class PlayerListProvider extends EmbeddedExtensionProvider { 
    protected PacketExtension createReturnExtension(String currentElement, String currentNamespace, Map<String,String> attributeMap, List<? extends PacketExtension> content) { 
    Log.w("***** AAAAAAAAAAAAAAAAAAAA *******", "0"); 
    return new XMLPlayerList(); 
    } 

} 



class XMLPlayerList implements PacketExtension { 

    public String getElementName() { 
    return "aaaaa"; 
    } 

    public String getNamespace() { 
    return "aaaaa"; 
    } 

    public String toXML() { 
    return "aaaaa"; 
    } 

} 

Và tôi nhận được thông báo sau Tôi chạy ứng dụng android của ứng dụng khách:

<message to="[email protected]" type="chat" id="9" from="[email protected]"> 
    <body> 
    &lt;players xmlns="boxer:players" command="playerlist"&gt; 
     &lt;player&gt;test1&lt;/player&gt; 
     &lt;player&gt;test2&lt;/player&gt; 
    &lt;/players&gt; 
    </body> 
    <thread>3P0i00</thread> 
</message> 

Câu hỏi của tôi bây giờ là, tại sao PlayerListProvider (EmbeddedExtensionProvider) không được gọi khi nhận được tin nhắn. Thư chứa thẻ và có không gian tên của võ sĩ quyền anh: người chơi, như tôi đã chỉ định trong smack.providers.

Mọi suy nghĩ?

+0

giải quyết vấn đề của bạn? bạn có thể vui lòng chia sẻ – Hunt

Trả lời

4

Sau khi đọc về các sự cố tương tự ở đây trên SO, tôi đã xem qua số question/answerblog post about another way (part 1) (part 2) này để thực hiện gửi/nhận tin nhắn tùy chỉnh.

Bạn đã cân nhắc sử dụng PacketExtensionProvider thay vì EmbeddedExtensionProvider?

Giải thích chi tiết hơn here, nếu bạn quan tâm đến việc dùng thử tại vị trí của EmbeddedExtensionProvider. Nó có thể không chính xác những gì bạn đang tìm kiếm ... (có vẻ như nó có nhiều cách tiếp cận phân tích cú pháp thủ công hơn), nhưng nó có thể nhận được lớp học PlayerListProvider của bạn được công nhận (thông qua việc mở rộng lớp PEPEvent.)

+0

Xin chào. Tất nhiên tôi đã làm điều đó, và không phải bởi .addExtensionProvider, tôi sử dụng các tập tin smack.providers, mà thực tế giống nhau, chỉ trong định dạng tập tin XML. Vì vậy, đây không phải là giải pháp cho vấn đề, vì nó không giải quyết được vấn đề của tôi, không phải tôi gần gũi hơn với việc giải quyết vấn đề của tôi và rõ ràng bạn không đặt nhiều nỗ lực vào việc tạo ra câu trả lời của bạn. – eleanor

+1

Tôi đã chỉnh sửa bài đăng của mình bằng câu trả lời khác, có thể. Chỉ cần cố gắng giúp đỡ ... vì không ai khác đã đăng một ý nghĩ về điều này, được nêu ra. :) – summea

Các vấn đề liên quan