2012-06-07 4 views
1

나는이 (의사 코드)처럼 보이는 콜백 시스템을 구현하고 싶습니다 :자바 콜백 인터페이스 구현의 내부 unscribe 리스너는

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

후 메시지를받은, 내가 미래에서 unscribe 할 뜻이 코드 알림. 콜백 내부에서이 액션을 매우 매력적으로 보았습니다.

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

1 분, Nice !!! –

+0

나는 같은 대답을 제출하기 전에 크롬이 새로운 답변 메시지를 표시하지 않는 이유를 알고 있습니다. +1 – mprabhat

관련 문제