Android開發之自動登錄功能的實現

jopen 10年前發布 | 111K 次閱讀 Android Android開發 移動開發

        在我們平時使用的手機應用都可以實現只需要登陸一次賬號后,第二次進入應用直接跳轉到效果界面的效果,還有QQ的登陸框是如何記憶我們的隱身登陸,保存賬號選項的呢,這些都是通過使用SharedPreferences共享參數效果實現的,而無須使用數據庫來存儲。以下我們直接看詳細代碼分析。

    package com.example.account.login;

import java.util.HashMap;  
import java.util.Map;  

import com.android.dao.MySQLiteOpenHelper;  
import com.example.account.MainActivity;  
import com.example.account.R;  

import android.app.Activity;  
import android.content.Context;  
import android.content.Intent;  
import android.content.SharedPreferences;  
import android.database.Cursor;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.TextView;  
import android.widget.Toast;  

public class LoginActivity extends Activity {  
    private EditText e1, e2;  
    private SQLiteOpenHelper helper;  
    private boolean flag, flag2, flag3;  
    private HashMap<String, Object> map;  

    @SuppressWarnings("unchecked")  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.login);  
        TextView textView = (TextView) this.findViewById(R.id.textView1);  
        e1 = (EditText) this.findViewById(R.id.editText1);  
        e2 = (EditText) this.findViewById(R.id.editText2);  
        //從共享參數獲取數據  
        map = (HashMap<String, Object>) getMsg("login");  
        if (map != null && !map.isEmpty()) {  
            if ((Boolean) map.get("login2")) {  
                //若值為true,用戶無需輸入密碼,直接跳轉進入操作界面  
                Intent intent = new Intent(LoginActivity.this,  
                        MainActivity.class);  
                startActivity(intent);  
            }  
        }  
        helper = new MySQLiteOpenHelper(this);  
        textView.setText("登錄界面");  
        Button button = (Button) findViewById(R.id.button2);  
        button.setOnClickListener(new OnClickListener() {  

            @Override  
            public void onClick(View v) {  
                if (!e1.getText().toString().isEmpty()  
                        && !e2.getText().toString().isEmpty()) {  
                    //從數據庫獲取賬號信息  
                    SQLiteDatabase database = helper.getReadableDatabase();  
                    Cursor cursor = database.query("user", new String[] {  
                            "username", "password" }, null, null, null, null,  
                            null);  
                    while (cursor.moveToNext()) {  
                        flag = e1  
                                .getText()  
                                .toString()  
                                .equals(cursor.getString(cursor  
                                        .getColumnIndex("username")));  
                        flag2 = e2  
                                .getText()  
                                .toString()  
                                .equals(cursor.getString(cursor  
                                        .getColumnIndex("password")));  
                        if (flag && flag2) {  
                            Intent intent = new Intent(LoginActivity.this,  
                                    MainActivity.class);  
                            startActivity(intent);  
                            //登陸跳轉動畫  
                            overridePendingTransition(R.anim.zoomin,  
                                    R.anim.zoomout);  
                            Toast.makeText(LoginActivity.this, "登錄成功",  
                                    Toast.LENGTH_SHORT).show();  
                            flag3 = true;  
                            //登陸成功后將flag設置為ture存入共享參數中  
                            HashMap<String, Object> map = new HashMap<String, Object>();  
                            map.put("login2", flag3);  
                            saveMsg("login", map);  
                        }  
                    }  
                    if (!flag3) {  
                        Toast.makeText(LoginActivity.this, "您輸入的帳號或密碼有誤",  
                                Toast.LENGTH_SHORT).show();  
                    }  
                } else {  
                    Toast.makeText(LoginActivity.this, "請正確輸入您的帳號密碼",  
                            Toast.LENGTH_SHORT).show();  
                }  

            }  

        });  
        Button button2 = (Button) findViewById(R.id.button1);  
        button2.setOnClickListener(new OnClickListener() {  

            @Override  
            public void onClick(View v) {  

                Intent intent = new Intent(LoginActivity.this,  
                        RegisterActivity.class);  
                startActivity(intent);  

            }  

        });  

    }  
   //將數據存儲進入共享參數  
    public boolean saveMsg(String fileName, Map<String, Object> map) {  
        boolean flag = false;  
        // 一般Mode都使用private,比較安全  
        SharedPreferences preferences = getSharedPreferences(fileName,  
                Context.MODE_PRIVATE);  
        SharedPreferences.Editor editor = preferences.edit();  
        // Map類提供了一個稱為entrySet()的方法,這個方法返回一個Map.Entry實例化后的對象集。  
        // 接著,Map.Entry類提供了一個getKey()方法和一個getValue()方法,  
        // 因此,上面的代碼可以被組織得更符合邏輯  
        for (Map.Entry<String, Object> entry : map.entrySet()) {  
            String key = entry.getKey();  
            Object object = entry.getValue();  
            // 根據值得不同類型,添加  
            if (object instanceof Boolean) {  
                Boolean new_name = (Boolean) object;  
                editor.putBoolean(key, new_name);  
            } else if (object instanceof Integer) {  
                Integer integer = (Integer) object;  
                editor.putInt(key, integer);  
            } else if (object instanceof Float) {  
                Float f = (Float) object;  
                editor.putFloat(key, f);  
            } else if (object instanceof Long) {  
                Long l = (Long) object;  
                editor.putLong(key, l);  
            } else if (object instanceof String) {  
                String s = (String) object;  
                editor.putString(key, s);  
            }  
        }  
        flag = editor.commit();  
        return flag;  

    }  

    // 讀取數據  
    public Map<String, ?> getMsg(String fileName) {  
        Map<String, ?> map = null;  
        // 讀取數據用不到edit  
        SharedPreferences preferences = getSharedPreferences(fileName,  
                Context.MODE_APPEND);  
        //Context.MODE_APPEND可以對已存在的值進行修改  
        map = preferences.getAll();  
        return map;  
    }  

}  </pre>來自:http://blog.csdn.net/gerogelin/article/details/35219377
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!