2012-02-21 19 views

risposta

58

Ho appena costruito questo in mia app, ecco il codice di base e qualche spiegazione:

Fondamentalmente la chiave qui è SharedPreferences. Potrai impostare un oggetto SharedPreferences e memorizzare il nome utente e la password dopo che l'utente li ha inseriti. Quindi, quando eseguono nuovamente l'applicazione, le loro preferenze verranno archiviate e quindi ripopolare i campi di accesso.

LoginActivity.java

package com.realsimpleapps.LoginTesting; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 

public class LoginActivity extends Activity implements OnClickListener { 

    private String username,password; 
    private Button ok; 
    private EditText editTextUsername,editTextPassword; 
    private CheckBox saveLoginCheckBox; 
    private SharedPreferences loginPreferences; 
    private SharedPreferences.Editor loginPrefsEditor; 
    private Boolean saveLogin; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     ok = (Button)findViewById(R.id.buttonLogin); 
     ok.setOnClickListener(this); 
     editTextUsername = (EditText)findViewById(R.id.editTextUsername); 
     editTextPassword = (EditText)findViewById(R.id.editTextPassword); 
     saveLoginCheckBox = (CheckBox)findViewById(R.id.saveLoginCheckBox); 
     loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
     loginPrefsEditor = loginPreferences.edit(); 

     saveLogin = loginPreferences.getBoolean("saveLogin", false); 
     if (saveLogin == true) { 
      editTextUsername.setText(loginPreferences.getString("username", "")); 
      editTextPassword.setText(loginPreferences.getString("password", "")); 
      saveLoginCheckBox.setChecked(true); 
     } 
    } 

    public void onClick(View view) { 
     if (view == ok) { 
      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(editTextUsername.getWindowToken(), 0); 

      username = editTextUsername.getText().toString(); 
      password = editTextPassword.getText().toString(); 

      if (saveLoginCheckBox.isChecked()) { 
       loginPrefsEditor.putBoolean("saveLogin", true); 
       loginPrefsEditor.putString("username", username); 
       loginPrefsEditor.putString("password", password); 
       loginPrefsEditor.commit(); 
      } else { 
       loginPrefsEditor.clear(); 
       loginPrefsEditor.commit(); 
      } 

      doSomethingElse(); 
     } 
    } 

    public void doSomethingElse() { 
     startActivity(new Intent(LoginActivity.this, MainActivity.class)); 
     LoginActivity.this.finish(); 
    } 
} 

Il metodo alla fine, doSomethingElse() è la vostra segnaposto per andare alla fase successiva per l'applicazione. Il mio metodo doSomethingElse() carica semplicemente un'altra attività.

Ecco un file XML di base per la pagina di login:

login.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#000" 
    android:padding="10dp" > 

    <EditText 
     android:id="@+id/editTextUsername" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/imageView1" 
     android:hint="Username" 
     android:inputType="textNoSuggestions" 
     android:imeOptions="actionNext" /> 

    <EditText 
     android:id="@+id/editTextPassword" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/editTextUsername" 
     android:hint="Password" 
     android:inputType="textPassword" 
     android:imeOptions="actionDone" /> 

    <CheckBox 
     android:id="@+id/saveLoginCheckBox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/editTextPassword" 
     android:text="Save Login?" 
     android:textColor="#FFF" /> 

    <Button 
     android:id="@+id/buttonLogin" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/saveLoginCheckBox" 
     android:layout_marginTop="40dp" 
     android:text="Login" /> 

</RelativeLayout> 

IMPORTANTE: È probabile che desidera crittografare la password prima di riporla in SharedPreferences. I dettagli per questo sono oltre lo scopo di questa domanda, ma qui è il codice che ho usato per farlo: http://www.androidsnippets.com/encryptdecrypt-strings. Dovrai trovare anche qualche tipo di schema chiave.

Questo codice è stato testato su Android 2.1, SDK 7. Fammi sapere come funziona per voi.

David

+1

Grazie mille per tutto il tuo aiuto David! mi ci sono voluti circa 40 minuti per capire. Ho ottenuto quel bit installato e funzionante ora :) –

+1

Funziona perfettamente! Grazie .. – TharakaNirmana

+1

ho appena preso un po 'di codice per la mia app, ha funzionato bene! – Bachask8

Problemi correlati