我在设计我的三个类时遇到问题,它们是:
UserManager - 使用 sessionManager 从服务器检索数据
SessionManger - 使用 WebRequest 处理 Web 会话和 Web 服务器上的请求,当请求之间的空闲时间大于允许的最大
WebRequest时自动登录用户- POST数据到网站并返回它的响应(这是异步类)
// 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
. 但是我应该如何设计这些类,以便在将它们传递给 User 之前更改从SessionManager 内部的 WebRequest 返回的数据?