我正在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是异步任务所在的活动。

现在,当我运行此代码时,loginDatanull。跟踪问题,我在指定位置放置了一个断点1。我看到loginpass都不为空,并且我看到程序流转到最后一行return new LoginData(...);。从那里返回... null

进一步跟踪问题,我添加了断点2,只是发现构造函数LoginData(...)没有被调用。

所以我的第一个问题是:我在这里是否缺少真正明显的东西?如果没有,则编译和运行的代码存在一些奇怪的问题。

一些说明:


LoginData在程序的另一个位置使用,并且可以工作-断点2接上了。
我尝试将LoginData重命名为其他名称,以防它被缓存在某个地方或名称发生奇怪的冲突。
我尝试在Eclipse的Android 2.1模拟器以及Galaxy Tab上运行它。
我尝试再次清洁和建造该项目。
我尝试再次关闭和打开该项目。
我尝试从工作空间中删除项目,然后再次导入。


我想避免创建新的Eclipse工作区的必要性(这是我最后的机会,在处理Java EE的类似情况下,它对我有帮助)。

该怎么办?

最佳答案

if (Utils.isEmpty(login) || Utils.isEmpty(pass))


尝试将这张支票替换为

if (login==null || pass==null)

10-07 19:50