Android中四種數據存儲方式, Shared Preferences主要是以鍵值對的形式來存儲數據,他僅僅是輕量級存儲機制,主要實現android比較簡單參數的設置。這裡主要利用其中一種即Shared Preferenced來實現本地用戶登錄,下面是效果圖:
這時我們可以設置用戶名和密碼。
然後,當我們下次在打開軟件的時候,即出現下面登錄的效果:
點擊確定之後我們就可以進入下一層顯示。Shared Preference主要是以getPreference()方法獲取對象,然後再通過Editor來設置裡面鍵值對形式的參數,最後再通過commit方法來提交保存這些數據,這些數據無法共享,即無法直接在多個程序間共享Preference數據。下面是上面效果的主要源碼:
- public class MainActivity extends Activity {
-
- private AlertDialog setPrefernAlertDialog;
- private AlertDialog showPasswordDialog;
- private boolean isFirst;
- //保存數據 專用
- private SharedPreferences sp;
- private EditText safenumber;
- private TelephonyManager tm;
- private Button start_button,modify_button;
- private boolean isStart;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- sp=this.getSharedPreferences("data",MODE_WORLD_READABLE);
- //主要以鍵值對的形式取出
- isFirst=sp.getBoolean("first", true);
- //若值沒設置 則開始設置密碼一類
- if (isFirst)
- {
- showSetPasswordDialog();
- return;
- }else {
-
- showInputPasswordDialog();
- }
-
- }
- public void init()
- {
- setContentView(R.layout.activity_main);
-
- }
-
- //第一次使用 創建彈出輸入密碼對話框 屬於dialog的基本操作
- private void showSetPasswordDialog()
- {
- AlertDialog.Builder builder=new AlertDialog.Builder(this);
- //給Dialog設置View 從XML文件轉換而來 這是屬於基本操作
- LayoutInflater inflater=LayoutInflater.from(this);
- View view= inflater.inflate(R.layout.show_password_dialog,null);
- final EditText username =(EditText)view.findViewById(R.id.username);
- final EditText userpassword=(EditText)view.findViewById(R.id.password);
-
-
- Button ok=(Button)view.findViewById(R.id.ok);
- Button cancle=(Button)view.findViewById(R.id.cancle);
- //設置動作
- ok.setOnClickListener(new OnClickListener()
- {
-
- @Override
- public void onClick(View v)
- {
- // TODO Auto-generated method stub
- String name=username.getText().toString();
- String password=userpassword.getText().toString();
- //設置密碼時 判斷兩者不能為空
- if(name.trim().equals("") || password.trim().equals("")) {
- Toast.makeText(MainActivity.this, "用戶名和密碼不能為空", Toast.LENGTH_LONG).show();
- return;
- }
- //sharedpreferences的基本操作 以鍵值對的形式保存到data文件中
- Editor editor=sp.edit();
- editor.putString("name",name);
- editor.putString("password",password);
- editor.putBoolean("first", false);
- //提交保存到生成的XML文件中
- editor.commit();
- setPrefernAlertDialog.dismiss();
- init();
-
- }
- });
- cancle.setOnClickListener(new OnClickListener()
- {
-
- @Override
- public void onClick(View v)
- {
- // TODO Auto-generated method stub
- //這裡注意要消去 對話框 再finish掉Activity 否則 有bug
- if (isFirst)
- {
- setPrefernAlertDialog.dismiss();
- MainActivity.this.finish();
- }
- setPrefernAlertDialog.dismiss();
-
- }
- });
-
-
- builder.setTitle("請設置密碼");
- builder.setView(view);
- setPrefernAlertDialog=builder.create();
- setPrefernAlertDialog.show();
-
- }
- /*
- * 當不是第一次操作,即已經設置完密碼之後的操作
- */
-
- public void showInputPasswordDialog()
- {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
-
- LayoutInflater inflater = LayoutInflater.from(this);
- View view = inflater.inflate(R.layout.show_password_dialog, null);
- final EditText et_username = (EditText) view.findViewById(R.id.username);
- final EditText et_password = (EditText) view.findViewById(R.id.password);
-
- Button btn_ok = (Button) view.findViewById(R.id.ok);
- Button btn_cancle = (Button) view.findViewById(R.id.cancle);
-
- btn_ok.setOnClickListener(new OnClickListener() {
-
- public void onClick(View v) {
- String name = et_username.getText().toString();
- String password = et_password.getText().toString();
-
- if(name.trim().equals("") || password.trim().equals("")) {
- Toast.makeText(MainActivity.this, "用戶名和密碼不能為空", Toast.LENGTH_LONG).show();
- return;
- }
- //獲取保存文件中的用戶名和密碼
- String savedUsername = sp.getString("name", "");
- String savedPassword = sp.getString("password", "");
- //查看輸入的密碼和名字是否一致
- if(name.trim().equals(savedUsername) && password.trim().equals(savedPassword)) {
- init();
- showPasswordDialog.dismiss();
- } else {
- Toast.makeText(MainActivity.this, "用戶名或者密碼錯誤", Toast.LENGTH_LONG).show();
- return;
- }
-
- }});
- //下面屬於基本的操作
- btn_cancle.setOnClickListener(new OnClickListener() {
-
- public void onClick(View v) {
- showPasswordDialog.dismiss();
- MainActivity.this.finish();
-
- }});
-
- builder.setTitle("輸入密碼");
- builder.setView(view);
- showPasswordDialog = builder.create();
- showPasswordDialog.show();
-
- }
-
- }