0

AsmackAPIを使用してフレンドリストを動的に更新しようとしています。テストの目的で、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はまだ空のままです。何かご意見は?

よろしくお願いします、マイク

4

2 に答える 2

1

登録しRosterListenerて、友達を追加、削除、更新することができます。ドキュメントを参照してください。

于 2012-11-25T00:07:01.233 に答える
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) {
    }
}
于 2012-11-25T17:45:22.350 に答える