2012-06-07 44 views
1

我想實現回調的系統,它看起來是這樣的(僞代碼):java的回調,接口實現的內退訂聽衆

final Listener listener = ListenerCtrl.addListener(new Listener() { 
    void onNotify(String response){ 
    ListenerCtrl.unsetListener(listener); 
} } 

此代碼意味着,收到消息後,我想從未來退訂通知。我發現在回調裏面有這個動作非常有吸引力。

這是我的實際執行情況:

final WebServiceMsgListener wml = new WebServiceMsgListener() 
{ 
    public void onMsgNotify(JSONObject response, int ecode) 
    { 
    Log.v(TAG, "getSetStateProgressBar MSG_MGT_STATICINFO: onMsgNotify ecode" + 
     ecode); 
    authDelegate.unsetMsgListener(wml); 
    } 
}; 

authDelegate.addMsgListener(NAOMsg.MSG_MGT_STATICINFO, wml); 

不幸的是,我目前的執行情況告訴我日食錯誤:「局部變量WML可能尚未初始化」

問:我怎樣才能得到圍繞這個,最終在回調內部未記錄,並沒有這個錯誤?

回答

2

你的代碼更改爲:

authDelegate.unsetMsgListener(this); 

this指當前對象(被在這個語句被執行時執行其onMsgNotify())。

注意:雖然變量wml可用於新對象,但它尚未在創建對象時初始化,因此錯誤。它在對象完全創建後立即被初始化。

+0

一分鐘,尼斯!!! –

+0

我不知道爲什麼鉻沒有顯示新的答案消息之前,我提交了相同的答案:) +1 – mprabhat