我在本地主機(jī)上運(yùn)行 openfire 服務(wù)器,Smack 版本 4.2.4.GetAllContacts() 方法中的異常。下面是我的類(lèi) XmppConnection 的代碼,它擴(kuò)展了類(lèi) org.jivesoftware.smack.ConnectionListener。 public class XmppConnection implements ConnectionListener{ private XMPPTCPConnection mConnection; public List<Contact> getAllContacts() throws SmackException.NotLoggedInException, InterruptedException, SmackException.NotConnectedException { Log.d(TAG,"getAllContats called()"); List<Contact> contacts = new ArrayList<>(); if(XmppConnectService.sConnectionState == ConnectionState.AUTHENTICATED){ Roster roster = Roster.getInstanceFor(mConnection); //exception here Collection<RosterEntry> entries = roster.getEntries(); Presence presence; for (RosterEntry entry : entries) { Contact c = new Contact(entry.getJid().toString()); presence = roster.getPresence(entry.getJid()); contacts.add(c); } return contacts;}public XmppConnection( Context context){ mApplicationContext = context.getApplicationContext(); String jid = PreferenceManager.getDefaultSharedPreferences(mApplicationContext) .getString("xmpp_jid",null); mPassword = PreferenceManager.getDefaultSharedPreferences(mApplicationContext) .getString("xmpp_password",null); if( jid != null) { mUsername = jid.split("@")[0]; mServiceName = jid.split("@")[1]; }else { mUsername =""; mServiceName=""; }}上面的代碼在 logcat 中顯示了這個(gè)錯(cuò)誤:java.lang.NullPointerException: XMPPConnection must not be null我從另一個(gè)類(lèi)調(diào)用 getAllContacts() 作為XmppConnection xmpp = new XmppConnection(this);contacts = xmpp.getAllContacts();getAllContacts() 方法是從另一個(gè)活動(dòng)調(diào)用的,并在 authenticated() 方法之后調(diào)用。因?yàn)樗窃?authenticated() 方法之后調(diào)用的,所以 mConnection 應(yīng)該已經(jīng)初始化了。
2 回答

有只小跳蛙
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
為 XmppConnection 類(lèi)創(chuàng)建一個(gè)新對(duì)象會(huì)將其變量初始化為 null。將 XMPPTCPConnection 聲明為靜態(tài)工作:
private static XMPPTCPConnection mConnection;

揚(yáng)帆大魚(yú)
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
如您的代碼所示,您在方法 connect() 內(nèi)初始化 mConnection 變量。并且您的方法authenticated() 不會(huì)調(diào)用connect() 方法。您能否確保在調(diào)用方法 authenticated() 之前或在方法內(nèi)調(diào)用 connect() 方法
添加回答
舉報(bào)
0/150
提交
取消