后的对象null我在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时的类似情况)的必要性。
怎么办?
在eclipse中我在listAdpater调试器中遇到同样的问题,如果返回并且在else中返回一些时候..所以请在这里提供isEmpty函数**并使用SOP一次来确认流和Lo-gin值和传递值 –
对不起,我不明白SOP是什么意思。我现在添加'isEmpty()'代码。 – vektor
log.d或System.out.println .... –