安卓小白开发之学习安卓的点点滴滴—数据库(2)

来源:互联网 发布:十天学会51单片机视频2 编辑:程序博客网 时间:2024/05/17 02:55

 

1, SharedPreferences储存

类似于Java容器中的map,Python中的字典,这种方式是以键值对类型储存的。支持多种不同的数据类型的储存,即存进去什么,读出来什么(对象的类型不会改变)。

 

方法&属性介绍:

 

getSharedPreferences()方法:

定义类:Context

特性:静态方法

参数:String类型的文件名,指定操作模式(Context下的常量)

返回值:SharedPreferences对象

 

MODE_PRIVATE

仍然与之前类似,且传入0是一样的效果

特性:只有当前活动可以读写

 

MODE_MULTI_PROCESS

特性:一般用于多个进程访问同一数据时使用

 

getPreference()方法:

定义类:Activity

特性:静态方法,自定义将当前活动文件名作为数据文件名称

参数:操作模式

返回值:SharedPreferences对象

 

getDefaultSharedPreferences()方法:

定义类:PreferenceManager

特性:静态方法,自动将当前活动的包名作为数据文件名

参数:context对象

返回值:SharedPreferences对象

 

edit()方法:

定义类:SharedPreferences

特性:非静态

参数:无

返回值: SharedPreferences.editor对象

 

put???()方法:

定义类:SharedPreferences.Editor

特性:  非静态方法,???代表存储数据类型,存String则???为String

参数:String类型(键),???类型(值),String则传String,boolean则传boolean,依次类推。

返回值:无

 

commit()方法:

定义类:SharedPreferences.Editor

特性:非静态方法,用于提交数据,执行命令

参数:无

返回值:无

 

get???()方法:

定义类:SharedPreferences.Editor

特性:非静态方法,用于读取文件中国的数据

参数:文件名(String类型),默认值(表示当传入参数找不到时会以什么样的默认值)

返回值:相应数据类型

 

Clear()方法:

定义类:SharedPreferences.Editor

特性:非静态方法,用于清除文件中的内容

参数:无

返回值:无

 

注意:这种方式,也并非所有的对象都可以收装进去。

 

案例:实现记住密码功能。

QQ等网络用用软件,往往在登录时,可以选择这样的选项,下面让我们来看看一种简单的实现方法。

 

首先考虑有三个基础界面:

登录界面,注册界面,登陆成功界面。

 

几种dialog:

未填写密码或者账号,账号或者密码错误。

 

一个用来装账号密码,以及上一次是否选中了记住密码选项的数据库存储库。

 

然后就可以开始动手了。

 

登录界面:

 

通过UI设计实现上述界面后就可以进行,activity中的跳转,及一系列操作了。

MainActivity:

packagecom.example.testlogin;

 

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.FileNotFoundException;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

 

importandroid.os.Bundle;

importandroid.preference.PreferenceManager;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.app.ProgressDialog;

importandroid.content.Context;

importandroid.content.DialogInterface;

importandroid.content.Intent;

importandroid.content.SharedPreferences;

importandroid.view.Menu;

importandroid.view.View;

importandroid.view.Window;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.CheckBox;

importandroid.widget.EditText;

importandroid.widget.Toast;

 

public classMainActivity extends Activity {

private Buttonlog,in;

private CheckBoxstore;

privateSharedPreferences pref;

@Override

protected void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);

        final EditTextzh=(EditText)findViewById(R.id.zh);

        final EditTextps=(EditText)findViewById(R.id.ps);

        log=(Button)findViewById(R.id.log);

        in=(Button)findViewById(R.id.in); 

        store=(CheckBox)findViewById(R.id.store);

        pref=getSharedPreferences("data1",0);

        finalSharedPreferences.Editor editor=pref.edit();

    boolean isRemembered=pref.getBoolean("isRemembered",false);

//在第一次没有数据时,该返回值自动为false

               if(isRemembered){

                      zh.setText(pref.getString("acount",""));

                      ps.setText(pref.getString("pass",""));

                      store.setChecked(true);

// 如果选中了,记住密码,则密码与账号自动补全

               }

               else{

                      editor.clear();

               }

                     

       

        log.setOnClickListener(newOnClickListener(){

 

               @SuppressWarnings("deprecation")

               @Override

               public void onClick(View arg0) {

                      // TODO Auto-generatedmethod stub   

              

                      if(zh.getText().length()>0&&ps.getText().length()>0){

                     

                      if(zh.getText().toString().equals("3")&&ps.getText().toString().equals("admin")){

                                           ThirdActivity.actionStart(MainActivity.this);

                                          

                                                  if(store.isChecked()){

                                                  editor.putBoolean("isRemembered",true);

                                                         editor.putString("acount",zh.getText().toString());

editor.putString("pass",ps.getText().toString());

editor.commit();

 //勿忘commit方法

                                                         }

                                                 

                                          

                             }

                             else{

                                    AlertDialog.Buildera=new AlertDialog.Builder(MainActivity.this);

                                   

                                    ps.setText("");

                                    a.setPositiveButton("OK",new DialogInterface.OnClickListener() {

                                           @Override

                                           publicvoid onClick(DialogInterface arg0, int arg1) {

                                                  //TODO Auto-generated method stub

                                                 

                                           }

                                    });

                           a.setNegativeButton("Cancle", newDialogInterface.OnClickListener() {

                                          

                                           @Override

                                          publicvoid onClick(DialogInterface arg0, int arg1) {

                                                  //TODO Auto-generated method stub

                                                 

                                           }

                                    });

                                           a.setTitle("Warning");

                                           a.setMessage("账号或密码错误请重新填写");

                                           a.show();//当密码账号不符合时弹出的warning

                             }

                 }

                      else{

                             AlertDialog.Buildera=new AlertDialog.Builder(MainActivity.this);

                             a.setPositiveButton("OK",new DialogInterface.OnClickListener() {

                                   

                                    @Override

                                    public voidonClick(DialogInterface arg0, int arg1) {

                                           //TODO Auto-generated method stub

                                          

                                    }

                             });

                   a.setNegativeButton("Cancle", newDialogInterface.OnClickListener() {

                                   

                                    @Override

                                    public voidonClick(DialogInterface arg0, int arg1) {

                                           //TODO Auto-generated method stub

                                          

                                    }

                             });

                                    a.setTitle("Warning");

                                    a.setMessage("账号或密码未填写");

                                    a.show();

               //当密码或者账号未填写时弹出的warning窗口

                      }

              

               }

              

        });

       

        in.setOnClickListener(newOnClickListener(){

 

               @Override

               public void onClick(View arg0) {

                      // TODO Auto-generatedmethod stub

               Intent i=newIntent(MainActivity.this,SecondActivity.class);

               startActivity(i);

               }

              

        });

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items tothe action bar if it is present.

        getMenuInflater().inflate(R.menu.main,menu);

        return true;

}

public static boolean equal(String a,String b){

        if (a.equals(b)){

               return true;

        };

               return false;

        }

}

简介:

对是否填入密码,账号,或是否正确进行操作,

这里设置账号为3

密码为admin

由于设置账号文本框只能输入数字,所以将本应相反的两者颠倒

这里还设置了两个dialog,用于当上述情况发生时弹出warning

 

数据isRemembered是用于判断上次是否选中的核心数据,当第一次不存在此数据时该方法返回值为false。

SecondActivity&ThirdActivity中内容简单:

 

packagecom.example.testlogin;

 

importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.view.Menu;

importandroid.view.Window;

 

public classSecondActivity extends Activity {

 

@Override

protected void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_second);

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items tothe action bar if it is present.

        getMenuInflater().inflate(R.menu.second,menu);

        return true;

}

 

}

packagecom.example.testlogin;

 

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.view.Window;

 

public classThirdActivity extends Activity {

 

@Override

protected void onCreate(BundlesavedInstanceState) {

        // TODO Auto-generated method stub

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.loged);

        super.onCreate(savedInstanceState);

}

public static void actionStart(Activityactivity){

        Intent i=newIntent(activity,ThirdActivity.class);

        activity.startActivity(i);

}

 

}

 

如此实现了记住密码的功能。

相关图片:


 

 

 

优势:使用方法简单,可以实现不同数据类型的储存。方便,快捷。

 

劣势:不能更好地分类,无法处理较为复杂的数据关系,且数据仍以明文形式储存,最后还得数据库上阵。

最后附上查找文件方法:

同样DDMS视图——>File Explorer视图——>data——>data——>对应包名——>shared——>所起data名



1 0