使用Asmack更新好友列表ListView

时间:2012-11-24 23:53:40

标签: android listview asmack

我正在尝试使用Asmack API动态更新好友列表。出于测试目的,我正在使用我的Facebook帐户。我发现如果我使用我的连接登录,那么使用

adapter = new ArrayAdapter<Contact>(this, android.R.layout.simple_list_item_1, contacts);
listView.setAdapter(adapter);

Roster people = connection.getRoster();

people.people.addRosterListener(new RosterListener() {

        public void presenceChanged(Presence arg0) {

          contacts.clear();

          for(RosterEntry entry: people.getEntries()) {

                if(people.getPresence(entry.getUser()).equals(Presence.Type.available)) {
                    Contact person = new Contact();
                    person.setJid(entry.getUser());
                    person.setName(entry.getName());

                    contacts.add(person);
                }
            }

           adapter.notifyDataSetChanged();
        }

这似乎不起作用。我的listView仍然是空的。有什么想法吗?

提前致谢, 麦克

2 个答案:

答案 0 :(得分:1)

您可以注册RosterListener来添加,删除或更新您的朋友。请参阅doc

答案 1 :(得分:1)

对于任何好奇的人来说,最好的方法是使用AsyncTask。最初填充它和RosterListener以使其保持最新。随着实时变化的发生。

这是我的代码。希望它能帮助将来的某个人。

 @Override
public void onResume() {
    super.onResume();

    pd = ProgressDialog.show(this,getString(R.string.DialogConnecting1),getString(R.string.DialogConnecting2) + " " + settings.getString("username", "NOT SET") + ". " + getString(R.string.DialogConnecting3), true, true);

    new ContactFetcher().execute("");

}

class ContactFetcher extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {

        contacts.clear();

        while(connection.getRoster().getEntries().isEmpty()){}

        people = connection.getRoster();

        for(RosterEntry entry: people.getEntries()) {

            //if(people.getPresence(entry.getUser()).getType().equals(Presence.Type.available)) {
                Contact person = new Contact();
                person.setJid(entry.getUser());
                person.setName(entry.getName());
                person.setStatus(people.getPresence(entry.getUser()));
                //person.setMsgState("");

                contacts.add(person);
            //}

        }

        return "";
    }      

    @Override
    protected void onPostExecute(String result) {
        adapter.sort(comparator);
        adapter.notifyDataSetChanged();

        pd.dismiss();

    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}