在我的应用程序中,我使用 XMPP 进行聊天,在此我必须创建一个服务以将所有联系人从 XMPP 服务器下载到我的数据库。我现在正在做下面的代码,获取所有联系人需要很长时间,我没有兴趣让用户等待完成下载所有联系人。由于这个原因,我想使用服务在后台完成这项工作,然后将它们存储在数据库中,如果数据库有新联系人,我将使用提供程序更新联系人。
我知道如何创建服务,但在这里我无法将 Roster 和 XMPP 连接等参数传递给服务,这些参数是从 XMPP 服务器下载联系人所必需的。请任何人指导我如何解决这个问题。这是我现在使用的代码。
public class GmailXmppClient {
public GmailXmppClient(ChatAccountsFragment _fragment, Context _context) {
this.fragment = _fragment;
this.context = _context;
ConnectionConfiguration config = new ConnectionConfiguration(server_host, SERVER_PORT, SERVICE_NAME);
m_connection = new XMPPConnection(config);
try {
m_connection.connect();
} catch (XMPPException e) {
e.printStackTrace();
}
}
public Roster getRoster() {
Log.i(TAG, " getRoster ");
return m_connection.getRoster();
}
public boolean Login(String uname, String pass ) throws XMPPException {
m_connection.login(uname, pass);
this.fragment.Gtalk_logInComplete(uname, m_connection);
this.setPacketFilters();
Presence presence = new Presence(Presence.Type.available);
Log.i("ID", "" + presence);
m_connection.sendPacket(presence);
return true;
}
public void disconnect() {
m_connection.disconnect();
}
}
从上面这段代码之后的代码
this.fragment.Gtalk_logInComplete(uname, m_connection);
此代码将运行以从 xmpp 服务器获取联系人
private void getConts() {
Roster roster = colors_xmpp_client.getRoster();
String file_name;
for (RosterEntry entry : roster.getEntries()) {
if (entry.getType() == ItemType.to || entry.getType() == ItemType.both) {
boolean yes = Contact_data_source.checkUsername(entry.getUser());
Log.i(TAG, "Con=" + yes);
if (!yes) {
String na = entry.getUser();
String[] me = na.split("@");
Bitmap buddy_img = buddyImage(entry, _connection);
if (buddy_img != null)
file_name = Store(buddy_img);
else
file_name = "";
if (entry.getName() == null)
Contact_data_source.createContact( entry.getUser(), entry.getUser(), Uname, file_name, UsedStrings.SipAccount, me[0] );
else
Contact_data_source.createContact( entry.getName(), entry.getUser(), Uname, file_name, UsedStrings.SipAccount, me[0] );
} else {
Log.i(TAG, "Con=exist");
}
}
}
return null;
}