Android: Conserver le nom d'utilisateur dans la session jusqu'à la déconnexion
Je vais avoir du mal à comprendre comment l'utiliser SharedPreferences pour stocker le nom d'utilisateur dans le téléphone et de rester en session jusqu'à la déconnexion. J'ai aussi besoin de savoir comment, dans le même temps son en session, il va envoyer le nom d'utilisateur avec les données de l'utilisateur, cliquez sur dans la liste. Ci-dessous sont les codes que je suis avec et je voudrais savoir où et quel est le code à mettre dans l'ordre pour réaliser cela. Comme login, il va aller dans le menu et de rester au menu (évitez le bouton retour du retour à l'écran de connexion) Tous les menus ont une déconnexion de l'élément qui permettra de revenir à l'écran de connexion.
Les questions précédentes, que j'ai regardé sont cette et cette
Logcat Détail
05-26 10:42:19.146: WARN/KeyCharacterMap(26071): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-26 10:42:23.926: DEBUG/AndroidRuntime(26071): Shutting down VM
05-26 10:42:23.926: WARN/dalvikvm(26071): threadid=3: thread exiting with uncaught exception (group=0x40013140)
05-26 10:42:23.926: ERROR/AndroidRuntime(26071): Uncaught handler: thread main exiting due to uncaught exception
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): java.lang.NullPointerException
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at com.merrill2.Login$1.onClick(Login.java:42)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.View.performClick(View.java:2232)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.View.onTouchEvent(View.java:3905)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.widget.TextView.onTouchEvent(TextView.java:6414)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.View.dispatchTouchEvent(View.java:3421)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:906)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.app.Activity.dispatchTouchEvent(Activity.java:1993)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.view.ViewRoot.handleMessage(ViewRoot.java:1533)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.os.Handler.dispatchMessage(Handler.java:99)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.os.Looper.loop(Looper.java:123)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at android.app.ActivityThread.main(ActivityThread.java:3992)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at java.lang.reflect.Method.invoke(Method.java:521)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
05-26 10:42:23.936: ERROR/AndroidRuntime(26071): at dalvik.system.NativeStart.main(Native Method)
05-26 10:42:23.946: INFO/Process(899): Sending signal. PID: 26071 SIG: 3
05-26 10:42:23.956: INFO/dalvikvm(26071): threadid=7: reacting to signal 3
05-26 10:42:23.966: INFO/dalvikvm(26071): Wrote stack trace to '/data/anr/traces.txt'
05-26 10:42:25.646: DEBUG/dalvikvm(25722): GC freed 973 objects / 63040 bytes in 93ms
05-26 10:42:27.777: DEBUG/DispatchService(945): Handled message = TIMED_SERVICE_UNMASK
05-26 10:42:29.856: DEBUG/DispatchService(945): DISPATCH SERVICE getIdenPacketDataState: returning: 4
05-26 10:42:29.876: INFO/iDENWAPReceiver(953): Received a android.intent.action.ANY_DATA_STATE
Login.java
public class Login extends Activity {
protected static final SharedPreferences settings = null;
private EditText etUsername;
private Button btnLogin;
private Button btnCancel;
private TextView lblResult;
/** Called when the activity is first created. */
//@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
etUsername = (EditText)findViewById(R.id.username);
btnLogin = (Button)findViewById(R.id.login_button);
btnCancel = (Button)findViewById(R.id.cancel_button);
lblResult = (TextView)findViewById(R.id.result);
btnLogin.setOnClickListener(new OnClickListener() {
//@Override
public void onClick(View v) {
//Check Login
String username = etUsername.getText().toString();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.putString("username", username);
if(username.equals("1111")){
lblResult.setText("Login successful.");
//startActivity(new Intent(this, Activity2.class));
Intent i = new Intent(getApplicationContext(), Customer.class);
startActivity(i);
si je prends la ligne ci-dessous:
protected static final SharedPreferences settings = null;
j'ai mis ceci:
btnLogin.setOnClickListener(new OnClickListener() {
private SharedPreferences settings;
"paramètres" est de donner à l'erreur, donc j'ai eu à utiliser l'un de ceux mentionnés ci-dessus
OriginalL'auteur merrill | 2011-05-24
Vous devez vous connecter pour publier un commentaire.
Pour ajouter l'utilisateur vient de faire:
Et de les effacer, en Déconnexion:
De cette façon vous assurez-vous que l'utilisateur ne dure que pour une seule session, jusqu'à ce qu'il se déconnecte. Vous devez faire un chèque (au cas où), lorsque vous ouvrez votre application, pour voir si il y a un nom d'utilisateur déjà à partir d'une session précédente, si quelque chose de mauvais s'est passé.
Et comme pour passer les données dans une liste, vous devez le faire à la main. SharedPreference cadre prend soin de tout le reste.
J'ai mis à jour le code ci-dessus. j'ai d'abord obtenir getDefaultSharePreferences erreur l'option correction est getPreferences() et d'autres est corrigé option est de créer une méthode getDefaultSharePreferences(contexte). L'autre erreur est que le nom d'utilisateur (nom d'utilisateur, sans le citer) pour créer un champ de nom d'utilisateur ou de modifier à etUsername mais si je change de etUsername la nouvelle erreur est putString et a dû créer de Chaîne privée etUsername mais il serait en conflit avec l'EditText etUsername. Comment puis-je aller à partir de là?
Par la façon dont, une fois connecter un utilisateur peut "retourner" à l'écran de connexion? Je voudrais éviter de l'écran de connexion (une fois la connexion) l'ensemble de la session jusqu'à la déconnexion.
Juste mis à jour ma réponse, dans l'ordre pour qu'il fonctionne, vous devez importer PreferenceManager, qui est la méthode getDefault... ce serait la bonne façon de le faire. Vous avez fait un autre deux questions ici... comme pour le nom d'utilisateur, de lui transmettre les données que etUsername.getText().toString(), en vérifiant d'abord qui n'est pas null. Et comme pour l'utilisateur d'être incapable de revenir à l'écran de connexion de la sont un couple de façons de le faire, essayez tout d'abord de faire de l'activité no_history="true" dans le Manifeste (vous pouvez aussi terminer() de l'activité après le chargement de l'écran suivant).
Désolé, je devrais être plus clair sur mon dernier commentaire. Ces erreurs sont après j'ai importé. Avec la mise à jour des réponses que vous avez ajouté les milieux de travail est une nouvelle erreur (option correction est de créer le champ, etc) pour les "paramètres" ou "Paramètres" (android.fournisseur de))...pouvez-vous me donner plus de détails sur le nom d'utilisateur j'ai encore cant pick que de ce que vous avez dit.
OriginalL'auteur ferostar
Je pense que cet exemple devrait être très utile.
http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/
La classe principale est ici:
OriginalL'auteur Sam003
Lorsque l'utilisateur se connecte avec succès, ajouter l'utilisateur
username
à laSharedPreference
pour votre application.Chaque fois que l'utilisateur ouvre l'application, vérifier pour voir si le "nom d'utilisateur" préférence est définie. Si c'est alors qu'il est connecté. sinon afficher l'écran de Connexion. Lorsque l'utilisateur se déconnecte, supprimer le "nom d'utilisateur" entrée par le partage de l'préf.
Vous aurez accès à l'ID de l'utilisateur à travers partagé pref de sorte que vous êtes en mesure de les utiliser quand vous en avez besoin. Le Android-cadre ne le fait pas pour vous, mais c'est une tâche simple pour vous de faire.
SharedPreferences settings = getSharedPreferences("MyPrefsFile", 0); String username = settings.getString("username", null);
Je ne peux pas vous dire comment communiquer cette info à votre serveur que je ne sais rien sur les protocoles et architecture que vous utilisez. Vous mettez ce code où vous avez besoin de l'accès à l'utilisateur.J'ai le code pour http et qui ont réussi à envoyer des données au serveur. Im essayant de comprendre comment attraper nom d'utilisateur info pour aller avec les données. Comme pour sharedpref, peut-il l'utilisateur de se tenir à l'écart de l'écran de connexion pendant toute la session, à moins que la déconnexion?
Vous pouvez l'utiliser pour voir si quelqu'un est connecté: si
settings.getString("username", null);
retournenull
ensuite, l'utilisateur n'est pas connecté. Si vous utilisez URI/Url pour transmettre des données, il suffit de jeter quelque chose comme"site.com/path?user="+username
exactement où pourrais-je mettre ceux du code? j'ai continué à obtenir de l'erreur.
OriginalL'auteur Haphazard
pour le stockage stocké dans les préférences de ce
pour récupérer la même utilisation
OriginalL'auteur Syed Danish Haider