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>
<players xmlns="boxer:players" command="playerlist">
<player>test1</player>
<player>test2</player>
</players>
</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ĩ?
giải quyết vấn đề của bạn? bạn có thể vui lòng chia sẻ – Hunt