#android #session
#Android #сессия
Вопрос:
У меня есть веб-социальная сеть (расположенная на веб-сервере), у которой есть API, и я пытаюсь разработать для нее приложение adroid. Теперь я уже могу подписаться (отправить ‘user and pass’ и аутентифицироваться) в этом API. Для этого у меня есть метод sendLogin (строковый пользователь, передача строки), который возвращает мне пользовательский объект.
Мой вопрос:
После этих шагов я хочу перейти на другой экран (например, главное меню). Как наилучшим образом сохранить пользовательский объект в моем приложении?
Например:
- Экран входа в систему: войдите в API
- API: проверка подлинности данных
- Экран входа в систему: создайте пользовательский объект
- Экран входа в систему: вызывает главное меню
- Пользователь: хочу увидеть ее данные (имя, адрес электронной почты, пол, возраст)
- Экран профиля: показать эти данные
Пользовательский объект был создан на Login.java но оно должно сохраняться на многих экранах (весь жизненный цикл приложения).
Я использовал это. Но с этим решением я буду делать это во многих местах, мне будет ужасно менять и поддерживать.
public void loginSucceed(User user){
Intent intent = new Intent();
intent.setClass(Login.this, MainMenu.class);
//passa parametros de uma activity pra outra
intent.putExtra("id",user.getId());
intent.putExtra("user",user.getUsername());
intent.putExtra("email",user.getEmail());
startActivity(intent);
}
Есть ли лучший способ?
Ответ №1:
Намерения — хороший способ для этого, но если вы не хотите его использовать, вы можете переопределить класс Application и поместить туда класс user, чтобы вы могли извлекать его при любом действии.
Глядя на ваш код намерения, ваш пользовательский класс не реализует parcelable, поскольку вы извлекаете его поле за полем. Если вы создадите класс, реализующий parcelable, вы просто сможете выполнить intent.putParcelable(group)
http://developer.android.com/reference/android/os/Parcelable.html
Комментарии:
1. Но с parceble мне понадобится намерение вызова на всех экранах, и мне не нужно это делать. Представьте приложение с 40 классами, мне нужно будет закодировать его во всех классах. : (В веб-приложении мы используем сеанс для сохранения всего, что хотим. Я знаю только, как я могу сохранить пользовательский объект в моем приложении.
2. на веб-странице вы также должны каждый раз загружать сеанс, а в приложении вы должны каждый раз загружать parcelable из intent, что составляет всего 1 строку кода. Что вы даже могли бы сделать, так это создать класс, например CustomActivity, который переопределяет activity. В этот класс вы помещаете код для чтения и записи пользователя из намерения. И вы позволяете всем другим действиям расширять класс CustomActivity вместо обычной активности. Таким образом, вам нужно будет закодировать его только один раз
Ответ №2:
Это может быть одним из способов сделать это. Сохраните HttpContext в объекте приложения, и когда вы переходите от действия к действию и вам нужно получить доступ к своему веб-сайту социальной сети, вы можете получить доступ к файлам cookie, хранящимся в CookieStore (в объекте приложения, связанном с HttpContext), и использовать это для доступа к своему веб-сайту.
Вот некоторый код по использованию HttpContext
Прочитайте эту тему о создании объекта Application и работе с ним
Это очень похоже на то, что вы делали бы с веб-приложением, чтобы вы могли перенести свои веб-знания на эту проблему.
Ответ №3:
Лучший способ сделать ваше приложение легковесным и динамичным — использовать java beans
class CommonBean implements Serializable
{
String name,gender;
int age;
// generate getter and setter for the variables.
}