Выйти, чтобы добавить друга в xmpp smack

В моем приложении, когда мне нужно добавить друга, я обычно отправляю пакеты подписки 4 раза, т.е.

A->B (подписаться) B->A (подписан) B-A (подписан) A->B (подписано)

После каждого шага я вижу на сервере статус меняется сразу.

Но в моем приложении это отражается только после выхода из системы и повторной регистрации. ЧЕЛОВЕК ДОЛЖЕН ВЫЙТИ ИЗ САЙТА, ПОСЛЕ ТОГО, КАК ОН ДОБАВИЛ ДРУГА, И ТОЛЬКО ДРУГ ПОКАЗАН В ЕГО ДРУГОМ СПИСОК>

Какие'проблема? Я нашел много, но не нашел ошибки :(

В logcat не отображается ошибка.

Я также напечатал вывод syso после отправки каждого пакета. Он всегда говорит как NONE (в случае человека, которому отправлен запрос) и всегда говорит TO / FROM (в случае пользователя, который отправил запрос в друзья). Оба не отображаются до тех пор, пока человек не войдет в систему. и снова входит в систему.

Пожалуйста, помогите мне :(

Add Friend Function

public boolean addFriend(String jid) {
        String nickname = null;
        String idExtension = jid+"@abc.hostname.com";
        nickname = StringUtils.parseBareAddress(jid);
        if (!roster.contains(idExtension)) {
            try {   
                roster.createEntry(idExtension, nickname, null);
                //to subscribe the user in the entry
                Presence subscribe = new Presence(Presence.Type.subscribe);
                subscribe.setTo(idExtension);               
                connection.sendPacket(subscribe);   
                return true;

            } catch (XMPPException e) {
                System.err.println("Error in adding friend");
                return false;
            }
        } else {
            return false;
        }
    }

Он отправит уведомление другому пользователю .. о разрешении написания этого кода: -

btn_Allow = (Button)findViewById(R.id.btn_manageNotification_ALLOW);
        btn_Allow.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                //accept the friends subscription
                Presence subscribed = new Presence(Presence.Type.subscribed);
                subscribed.setTo(id);               
                connection.sendPacket(subscribed);



                mCustomProgressDialog = CustomProgressDialog.createDialog(
                        ManageNotification.this, "", "");
                mCustomProgressDialog.show();   
                mCustomProgressDialog.setCancelable(false); 
                new Thread(){
                    public void run() {

                        try {
                            sleep(5000);
                            //mXmconn.getContactList();

                            /*Presence subscribed = new Presence(Presence.Type.subscribe);
                            subscribed.setTo(id);               
                            System.out.println("The user is :"+id);
                            connection.sendPacket(subscribed);*/

                        } catch (InterruptedException e) {}                     
                        mReturnUserMenu.sendEmptyMessage(0);

                    };
                }.start();
            }
        });

то же самое делается снова для разрешения пользователя, который инициировал запрос.

Пожалуйста помоги. Статус подписки на сервере изменяется мгновенно, но в приложении он обновляется после выхода из системы один раз.

Вот код, который представляет списки

public  void getContactList(){

        roster = connection.getRoster();

        Collection entries = roster.getEntries();
        System.out.println("Total=="+entries.size());
        mfriendList.clear();
        mfriendPendingList.clear();
        mfriendRequestList.clear();
        for (RosterEntry entry : entries) {
            mFriendsDataClass = new FriendsDataClass();

            mFriendsDataClass.friendName = entry.getUser().toString();

            String user = entry.getUser();

            int index_of_Alpha = user.indexOf("@");
            /*System.out.println("The current working user is : "+user);
            System.out.println("His status is"+entry.getType().toString());*/
            String subID = user.substring(0, index_of_Alpha);
            Presence availability = roster.getPresence(user);
            Mode userMode = availability.getMode();

            mFriendsDataClass.availability = "";
            mFriendsDataClass.friendNickName = subID;           
            mFriendsDataClass.friendStatus = stusMsg.toString();
            mFriendsDataClass.friendState = retrieveState_mode(availability.getMode(),availability.isAvailable());
            if(entry.getType().toString().equalsIgnoreCase("to")){
                //getContactList();
                mfriendRequestList.add(mFriendsDataClass);
            }else if(entry.getType().toString().equalsIgnoreCase("from")){
                //getContactList();
                mfriendPendingList.add(mFriendsDataClass);
            }else if(entry.getType().toString().equalsIgnoreCase("both")){
                //getContactList();
                mfriendList.add(mFriendsDataClass);
            }           
        }
    }

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос