我正在 Eclipse 3.7.2 中开发一个 Android(API 级别 7)应用程序。我有一个最奇怪的问题:
有一个类LoginData用于保存登录信息:
public class LoginData {
  private final String login;
  private final String password;
  public LoginData(final String login, final String password) {
    this.login = login;                                      // breakpoint 2 here
    this.password = password;
  }
  public String getLogin() {
    return login;
  }
  public String getPassword() {
    return password;
  }
}
然后有一个方法来检索它(在另一个类中):
public static LoginData getLoginData(final Context context) {
  final SharedPreferences prefs = getPrefs(context);
  final String login = prefs.getString(LOGIN, null);
  final String pass = prefs.getString(PASS, null);
  if (Utils.isEmpty(login) || Utils.isEmpty(pass)) {        // breakpoint 1 here
    return null;
  }
  return new LoginData(login, pass);
}
方法 isEmpty() 如下所示:
public static boolean isEmpty(final String s) {
  return s == null || "".equals(s);
}
getLoginData()和一个在内部调用的方法AsyncTask:
@Override
protected WSResult doInBackground(final Params... params) {
  final LoginData loginData = Prefs.getLoginData(context);
  ...
context是异步任务所在的活动。
现在,当我运行此代码时,loginData是null. 跟踪问题,我在指定位置放了一个断点1。我看到两者login都不pass是空的,我看到程序流程转到最后一行,return new LoginData(...);. 从那里它返回... a null。
进一步跟踪问题,我添加了断点 2,却发现构造函数LoginData(...)没有被调用。
所以我的第一个问题是:我在这里遗漏了一些非常明显的东西吗?如果不是,那么编译和运行的代码就会出现一些奇怪的问题。
一些备注:
- LoginData在程序的另一个位置使用,并且可以工作 - 断点 2 接上来。
- 我尝试重命名LoginData为其他名称,以防它缓存在某处或出现奇怪的名称冲突。
- 我尝试在 Eclipse 的 Android 2.1 模拟器以及 Galaxy Tab 上运行它。
- 我再次尝试清理和构建项目。
- 我尝试再次关闭和打开项目。
- 我尝试从工作区中删除项目并再次导入。
我想避免创建一个新的 Eclipse 工作区的必要性(这是我最后的机会,它在处理 Java EE 时帮助了我类似的情况)。
该怎么办?