asynchronus 콜백 :
UserManager이 -
SessionManger이 SessionManager에를 사용하여 서버에서 데이터를 retreive를 - 웹 세션을 사용하여 웹 서버에서 요청을 처리 WebRequest 클래스를 사용자를 자동 로그인하는이
WebRequest 클래스 허용 된 최대 값보다 더 큰 요구 사이의 유휴 시간 때 - 웹 사이트에 POST 데이터를하고 응답의 반환설계하는 방법이 I는 나의 세 가지 클래스 설계에 문제가
// Posts dat to web server and returns response using Interface
public class WebRequest extends AsyncTask<String, Integer, byte[]> {
interface DoneInterface {
void onSuccess(byte []data);
void onError(Exception e, String message);
};
// Sets interface to be called when request from server is done
public void onDone(DoneInterface callable)
// Requests data from server
public boolean PostUrl(String url);
// ... other methods, variables
}
// Handles auto login of user
public class SessionManager {
private WebRequest webRequest = null;
// Creates request on web server, "callback" is interface that should be called when
// WebRequest instance is done with downloading response
public void Request(String url, HashMap data, WebRequest.DoneInterface callback) {
webRequest.onDone(new WebRequest.DoneInterface() {
@Override
public void onSuccess(byte[] data) {
// HERE I NEED TO DO SOME ACTION BEFORE CALLING callback.onSuccess
// that was passed as argument and will process data
callback.onSuccess(data);
}
@Override
public void onError(Exception e, String message) {
// IF error, we will need to crate new session probalby
sandManager = null;
// Call callback (interface) passed as argument
callback.onError(e, message);
}
});
webRequest.PostUrl(url);
}
// ... other methods, variables
}
// Main class
class User {
private SessionManager session = new SessionManager();
public SomeMethod() {
session.Request(new WebRequest.DoneInterface() {
@Override
public void onSuccess(byte[] data) {
// Here I need to process data received from web server
}
@Override
public void onError(Exception e, String message) {}
});
}
}
(이 비동기 클래스)
이 오류가 발생합니다.Cannot refer to a non-final variable "callback" inside an inner class defined in a different method
(SessionManager, callback.onSuccess (data); 행). 나는 "콜백"변수가 final
이 아니기 때문에 그것이 무엇인지 알고있다. 하지만 이 클래스를 어떻게 디자인해야합니까? 데이터를으로 변경하면 UserA로 전달하기 전에 WebReequest 이 SessionManager 내에 반환됩니다.
당신이 말하는 것을 할 필요가 있고, 당신의 방법 매개 변수를'final'로 선언해야합니다. –
아무 일도하지 않는 것 같습니다. – Elazar