1

XMPPベースの通信用のAndroidアプリでSmackを使用しています。PrivacyManagerを使用してプライバシーリストを作成しようとしています。PrivacyListを正常に作成しましたが、そのリストにアクセスしようとすると、ClassCastExceptionが返されます。コードは次のとおりです。

PrivacyListManager privacyManager;
privacyManager = PrivacyListManager.getInstanceFor(connection);
PrivacyList privacyList = privacyManager.getPrivacyList("msg_block_list");

もう少し調べてみると、次の行のPrivacyListManager.javaクラスのgetRequestメソッドで例外が発生していることがわかりました。

Privacy privacyAnswer =
            (Privacy) response.nextResult(SmackConfiguration.getPacketReplyTimeout());

getRequestメソッドは次のとおりです。

private Privacy getRequest(Privacy requestPrivacy) throws XMPPException {
        // The request is a get iq type
        requestPrivacy.setType(Privacy.Type.GET);
        requestPrivacy.setFrom(this.getUser());

        // Filter packets looking for an answer from the server.
        PacketFilter responseFilter = new PacketIDFilter(requestPrivacy.getPacketID());
        PacketCollector response = connection.createPacketCollector(responseFilter);

        // Send create & join packet.
        connection.sendPacket(requestPrivacy);

        // Wait up to a certain number of seconds for a reply.
        Privacy privacyAnswer =
            (Privacy) response.nextResult(SmackConfiguration.getPacketReplyTimeout());

        // Stop queuing results
        response.cancel();

        // Interprete the result and answer the privacy only if it is valid
        if (privacyAnswer == null) {
            throw new XMPPException("No response from server.");
        }
        else if (privacyAnswer.getError() != null) {
            throw new XMPPException(privacyAnswer.getError());
        }
        return privacyAnswer;
    }

私はPrivacyListを実装するためにこのチュートリアルに従いました。誰でも助けることができますか?

4

2 に答える 2

0

PacketCollectorのメソッドはオブジェクトをgetResult()返しますが、またはまたはのいずれかでクラスオブジェクトPacketから継承されたものである可能性があります(キャストを使用できる場合は、の子クラスであるため)。あなたの場合、クラスではなく、別の階層に存在するオブジェクトを取得しているようです。PacketMessagePresenceIQIQ(privacy)PrivacyIQPrivacy

于 2011-04-04T06:48:37.653 に答える
0

私は問題を見つけました。XMLファイルsmack.providersがありませんでした。以下の内容でファイルを作成しましたが、動作しました。

<?xml version="1.0"?> 
<!-- Providers file for default Smack extensions -->
<smackProviders> 
 <!-- Privacy -->
    <iqProvider>
        <elementName>query</elementName>
        <namespace>jabber:iq:privacy</namespace>
        <className>org.jivesoftware.smack.provider.PrivacyProvider</className>
    </iqProvider>    
</smackProviders>
于 2011-04-04T12:16:49.677 に答える