Salvar objeto em uma sessão

Andei procurando no android alguma coisa parecida com o session do java web, e encontrei na API o SharedPreferences, porém fiquei decepcionado pois não da pra salvar objeto, alguém sabe me informar se existe alguma coisa desse tipo??? Desde já agraço muito ^^

Claro, cria um classe que tenha um atributo estático. Exemplo:

public SuaClasse {
  public static String seuAtributo;
}

Aí na hora de gravar a seu dado:

SuaClasse.seuAtributo = "Teste";

Na hora de ler:

System.out.println(SuaClasse.seuAtributo);

Não é exatamente isso que eu quero cara -.-’

Dependendo do tipo de objeto você pode converte-lo para JSon ou XML e salva-lo no SharedPreferences como uma String normal.

Por que não ? você vai obter o objeto na hora que você quiser. E usando um recurso simples do proprio java.

Lembrando que utilizei String com exemplo, sendo que String é um objeto.
Ou seja voce pode usar com qualquer objeto. Exemplo: Usuario :wink:

Lembrando que utilizei String com exemplo, sendo que String é um objeto.
Ou seja voce pode usar com qualquer objeto. Exemplo: Usuario :wink:

Cara é só vc salvar os atributos do objeto,ou caso não queira salve um json em uma string,e depois quando for utilizar esses dados use algum parser,por exemplo,o gson ou a propria api do android para fazer o parsing do json:


public class UserSession {
	final static String USER_SESSION = "user_session";
	private final static String ID = "id";
	private final static String EMAIL = "email";
	private final static String PASSWORD = "password";
	private final static String IS_LOGGED = "is_logged";
	private SecurePreferences preferences;

	private Context context;

	public UserSession(Context context) {
		this.context = context;
		String secure_key = "fksdfjnsdfkjsdnfksjdnfksdjnfsdkfn";
		preferences = new SecurePreferences(context, "userSession", secure_key, true);
	}

	public void keepSession(User user) {
		preferences.put(ID, String.valueOf(user.getId()));
		preferences.put(EMAIL, user.getEmail());
		preferences.put(PASSWORD, user.getPassword());
		preferences.put(IS_LOGGED, String.valueOf(true));
		Log.i("UserSession", "User created "+user.toString());
	}

	public void destroySession() {
		preferences.clear();
	}

	public User getLoggedUser(){
		User user = new User();
		user.setId(preferences.getLong(ID,0 ));
		user.setName(preferences.getString(PASSWORD, ""));
		user.setEmail(preferences.getString(EMAIL, ""));
		user.setId(Long.parseLong(preferences.getString(ID)));
		user.setName(preferences.getString(PASSWORD));
		user.setEmail(preferences.getString(EMAIL));
		Log.i("UserSession", "User logged "+user.toString());
		return user;
	}
	
	
	}


	

}

No meu caso eu usei esse projeto: https://github.com/sveinungkb/encrypted-userprefs, pois nas SharedPreferences padrão quando vc salva algum dado ele não é encriptado,ele apenas salva um xml com as informações mapeadas. Caso vc tenha alguma informação sensivel ,como uma senha, essa informação ficará visivel para qualquer um que acessar os dados da aplicação exemplo:
ao acessar sua aplicação pelo shell do android: cat /data/data/your.package.application/shared_prefs/prefs.xml , vc vai visualizar isso:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="email">email@email.com</string>
<string name="senha">123456qwerty</string>
</map>

Como pode ver a senha está exposta para qualquer pessoa ou aplicação mal-intencionada acessar.
Uma vez que eu tenha salvo encriptado,será mais dificil o acesso a essas informações:

<string name="333rfoesodf">fdsdfdfsdfdfdfsdf78888888888888888888883efudhysfgusdyfgsdufygsd</string>
<string name="fsdfsdf">JopRH053b7Ogw17Yxmh7Og==">0AB7Y28XEvbQcnXpEZ4j9PtqzFLtm2V3KBXjTO1V704=</string>

Não é uma solução 100%,e codigo é bem auto-explicativo,mas já dificulta a vida de que quiser acessar de modo indevido os dados da sua aplicação. No readme do projeto vc tem toda explicação do que vc tem que fazer,lembrando que internamente ele possui uma sharedpreference,então não precisa se preocupar em criar a sua própria sharedpreference.