0

我在设计我的三个类时遇到问题,它们是:
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 返回的数据?

4

1 回答 1

0

即使您制作了变量,您也可以这样做finalfinal仅表示您不能为局部变量分配新值。这是为了消除如果将局部变量放入内部类然后更改的混淆。如果您不需要重新指向callback新的回调,final则不会限制您。只要成功final,相信我,一切都会好起来的。

于 2013-09-21T17:36:55.213 回答