2012-02-21 19 views
14

Kullanıcı Kimliği ve Şifreyi Hatırlamak için bir Onay Kutusu düğmesine sahip olmak isterim. Başlamak için nasıl doğru yönde bana yol gösterebilir? "Beni Hatırla" onay kutusunu işaretleyin

Temelde Burada anahtar SharedPreferences: Ben sadece benim app içine bu yerleşik

+0

Zaten işlevini hatırla dışında, tam oturum açma işlevini zaten oluşturdunuz mu? – WarrenFaith

cevap

58

, burada temel kod ve bazı açıklama. Bir SharedPreferences nesnesi ayarlarsınız ve kullanıcı adınızı girdikten sonra kullanıcı adınızı ve şifrenizi kaydedersiniz. Daha sonra, uygulamayı tekrar çalıştırdıklarında, tercihler verilerin saklanacağını ve daha sonra oturum açma alanlarını yeniden oluşturacaktır.

LoginActivity.java

sonunda
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(); 
    } 
} 

yöntem doSomethingElse() uygulamanız için bir sonraki adıma geçmek için tutucudur. DoSomethingElse() yöntemim başka bir etkinliği basitçe yükler.

<?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> 

ÖNEMLİ

login.xml:

İşte giriş sayfası için temel bir xml dosyası var olasılıkla SharedPreferences içinde saklamadan önce şifresini şifrelemek isteyeceksiniz. Bunun için ayrıntılar bu sorunun kapsamı dışındadır, ancak burada yaptığım kod: http://www.androidsnippets.com/encryptdecrypt-strings. Bir çeşit anahtar şema da bulmalısın.

Bu kod Android 2.1, SDK 7 üzerinde test edilmiştir. Size nasıl çalıştığını bildirin.

David

+1

Yardımlarınız için çok teşekkür ederim David! Anlamak için yaklaşık 40 dakika sürdü. Ben şimdi biraz var ve koşuyorum :) –

+1

Mükemmel çalışır! Teşekkürler .. – TharakaNirmana

+1

Sadece benim app için bazı kod toke, iyi çalıştı! – Bachask8

İlgili konular