我正在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(...);
。从那里返回... 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)