Я разрабатываю приложение Android (API уровня 7) в Eclipse 3.7.2. У меня самая любопытная проблема:Объект null сразу после конструктора
Там есть класс называется 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);
}
И метод, вызывающийвнутри 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
на что-то еще, на случай, если он кэширован где-то или есть странное имя. - Я попытался запустить это на эмуляторе Android 2.1 от Eclipse, а также на Galaxy Tab.
- Я пробовал очистить & снова здание проекта.
- Я попытался закрыть &, снова открыв проект.
- Я попытался удалить проект из рабочего пространства и импортировать его снова.
Я хотел бы избежать необходимости создания нового рабочего пространства Eclipse (это мой последний шанс, это помогло мне в аналогичном случае при работе с Java EE).
Что делать?
в eclipse Я сталкиваюсь с той же проблемой в listAdpater отладчик идет как в случае возврата, так и в другое время возвращаться несколько раз. Также пожалуйста ** предоставить функцию isEmpty здесь ** и использовать SOP один раз, чтобы подтвердить поток и значение lo-gin & pass –
Извините, я не понимаю, что вы подразумеваете под SOP. Я добавляю код 'isEmpty()' сейчас. – vektor
log.d или System.out.println .... –