在调用vcard.load(conn)时Android asmack vcard classcastException

在调用vcard.load(conn)时Android asmack vcard classcastException,android,xmpp,asmack,vcf-vcard,Android,Xmpp,Asmack,Vcf Vcard,我使用的是来自的asmack-android-8-4.0.5.jar,我能够成功连接并登录,但当我尝试加载自己的vcard时,它会在vcard.doload方法中抛出classcastexception。请帮助任何人。下面是我正在使用的完整代码。 private class ConnectTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) {

我使用的是来自的asmack-android-8-4.0.5.jar,我能够成功连接并登录,但当我尝试加载自己的vcard时,它会在vcard.doload方法中抛出classcastexception。请帮助任何人。下面是我正在使用的完整代码。

private class ConnectTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {

        Roster.setDefaultSubscriptionMode(SubscriptionMode.accept_all);
        configure(new ProviderManager());
        ConnectionConfiguration config = new ConnectionConfiguration(
                "my host here", 5222, "xmpp.jp");
        config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
        config.setCompressionEnabled(true);
        ProviderManager.addIQProvider("vCard", "vcard-temp",
                new VCardProvider());
        connection = new XMPPTCPConnection(config);
        try {
            connection.connect();
            System.out.println("sanidhya09 connected");

            try {
                connection.login("sanidhya09", "*****");
                System.out.println("sanidhya09 logged in ");
            } catch (SaslException e) {
                e.printStackTrace();
            } catch (XMPPException e) {
                e.printStackTrace();
            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (Exception e) {
            System.err.println("sanidhya09 Failed to connect to "
                    + "xmpp.jp");
            return null;
        }
        return null;
    }

    protected void onPostExecute(Long result) {
        Presence pres = new Presence(Presence.Type.available);

        try {
            connection.sendPacket(pres);
        } catch (NotConnectedException e1) {
            e1.printStackTrace();
        }
        VCard vCard = new VCard();
        try {
            ProviderManager.addIQProvider("vCard", "vcard-temp",
                    new VCardProvider());
            System.out.println("sanidhya09 vcard trying");
            vCard.load(connection);
            System.out.println("sanidhya09 vcard loaded");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

嘿,我的脸也一样我发现了这个:

VCard result = (VCard) connection.createPacketCollectorAndSend(this).nextResultOrThrow();
将此更改为

Packet packet = connection.createPacketCollectorAndSend(this).nextResultOrThrow(); 
打印这个,返回的vcard数据包是完美的,所有N FN EMAIL TEL字段都是XML标记,类强制转换异常是因为vcard.java扩展为IQ,IQ是扩展数据包的类

目前,我正在使用SAXParser和xml提取从上面的对象数据包中读取的详细信息,并根据需要将其保存在vcard中,但仍然没有成功,但提取正在工作


升级后开始面临问题,将很快发布更好的解决方案,如果@flow能够回答或修复这一问题,那将是非常好的

我现在已经让它工作了。事实上,它们在xml响应中是一个问题。它没有头像,或者头像出现故障。在保存阿凡达时,我甚至有一个错误的base64

通过以下方式保存化身,使其正常工作:

    private void uploadProfilePic() {
    try {
        Bitmap resized = Bitmap.createScaledBitmap(selected_img,128, 128,
                true);
        obj_UserInfo.setProfilePic(resized);
        String get64BaseString = get64BaseString(resized);

        VCard vCard = new VCard();

        vCard.setAvatar(get64BaseString, "image/jpeg");
        vCard.save(CGlobalVarriables.connection);
        System.out.println("image upload successfuls");
        CGlobalVarriables.obj_UserInfo.setProfilePic(resized);


    } catch (Exception e) {
        e.printStackTrace();
    }
}
private Bitmap getProfilePic() {

    VCard vCard = new VCard();
    try {
        vCard.load(CGlobalVarriables.connection);
        byte[] array = vCard.getAvatar();
        Bitmap bitmap = BitmapFactory.decodeByteArray(array, 0,
                array.length);

        return bitmap;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;

}
通过以下方式加载vCard:

    private void uploadProfilePic() {
    try {
        Bitmap resized = Bitmap.createScaledBitmap(selected_img,128, 128,
                true);
        obj_UserInfo.setProfilePic(resized);
        String get64BaseString = get64BaseString(resized);

        VCard vCard = new VCard();

        vCard.setAvatar(get64BaseString, "image/jpeg");
        vCard.save(CGlobalVarriables.connection);
        System.out.println("image upload successfuls");
        CGlobalVarriables.obj_UserInfo.setProfilePic(resized);


    } catch (Exception e) {
        e.printStackTrace();
    }
}
private Bitmap getProfilePic() {

    VCard vCard = new VCard();
    try {
        vCard.load(CGlobalVarriables.connection);
        byte[] array = vCard.getAvatar();
        Bitmap bitmap = BitmapFactory.decodeByteArray(array, 0,
                array.length);

        return bitmap;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;

}

始终包含完整的异常,包括其stacktrace!hi@Flow刚才我发现我的代码的vcard在gtalk服务器上运行良好,但在vcard上使用xmpp.jp或jabber.se服务器时失败。你能推荐一些好的服务器用caps发送xml响应吗。或者我该如何解决这个问题?注意:我已经使用asmack源代码构建了我的应用程序。为什么失败?你为什么不添加询问的信息?@Flow对不起,我现在已经添加了。请将代码滚动到底部。您是否阅读并遵循aSmack自述文件的说明?无需更改任何内容,aSmack库非常棒。当您没有设置了化身的正确vcard时,在调用vcard.load(conn)时会发生这种情况。我想看看你是如何保存一张vcard的。使用Spark(igniteRealtime)设置vcard的,谢谢你会通过Asmack设置检查,但是为什么班级演员例外现在会检查并回复你我可以请你向论坛报告你的发现吗?我还不清楚到底是什么导致了这一现象。