後的對象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 .... –