分享到:
点击次数:333  更新时间:2016-10-11 16:24:04  【打印此页】  【关闭
澳门新濠天地娱乐场澳门新濠天地娱乐定制
当前位置:主页 > 新闻动态 > 技术交流 > Android开发之自动登录功能的实现

Android开发之自动登录功能的实现

责任编辑:admin 发布时间:2016-11-17 14:31 浏览次数:

     在我们平时使用的手机应用都可以实现只需要登陆一次账号后,第二次进入应用直接跳转到效果界面的效果,还有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; 
        } 
     
    }