我正在 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 时帮助了我类似的情况)。
该怎么办?