2017.12.25 Android数据存储方案

1.持久化技术:

数据持久化:将内存中的数据保存到文件,以使得设备在关机或者重启以后也能正常使用的一种技术;

内存态与持久态之间切换的代价:CPU,文件读取,文件写入,内核态的切换

 

2.Android内置的持久化技术:

(1)文件系统;

(2)SharedPreferences

(3)SQLite

 

3.文件系统如何使用:文件持久化

如何把数据保存到文件中:

 

如何把数据从文件中读取出来:

 

注意:数据默认放在data/data/packagename/files文件夹下,放在其他的路径下会被系统警告

文件写入和读取的例子:

(1)布局文件:

(2)写入和读取文件的java程序:

2.1定义变量以及获取布局ID:

 

 

public void write(){
String data="圣诞快乐,祝大家考试顺利!";
FileOutputStream out=null;
BufferedWriter writer=null;
try{
out=openFileOutput("data.log", Context.MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if (writer!=null){
writer.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}

 2.2按钮绑定写入文件函数事件:

  WriteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                write();
            }
        });

 

(3)定义写入文件的权限:

 (4)读取文件的Java程序:

 public String Read(){       //返回一个String
        FileInputStream in=null; //读文件的数据流
        BufferedReader reader=null;
        StringBuilder content=new StringBuilder();
        try{
            in=openFileInput("data.log");
            reader=new BufferedReader(new InputStreamReader(in));
            String line="";
            while ((line=reader.readLine())!=null){
                content.append(line);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(reader!=null){
               try{
                   reader.close();
               }catch (IOException e){
                   e.printStackTrace();
               }
            }
        }

        return content.toString();
    }

3.1按钮绑定读取文件系统数据:

 ReadButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String str=Read();
                Toast.makeText(MainActivity.this,str,Toast.LENGTH_LONG).show();
            }
        });
    }

 

4.SharedPreferences如何使用:

 (1)非关系性数据

(2)以Key-Value键值对的形式存储;

(3)本质上是维护了一个XML文件,在这个文件上进行数据存储与读取;

例子:直接看Java程序代码就好,其他的都一样

    public void write(){    //没有返回值的
        SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
        //第一个参数:存储的文件名字,第二个参数是打开的模式
        editor.putString("username","chunyu");
        editor.putString("password","0321");
        editor.apply();

    }

按钮绑定写入SharedPreferences的事件:

  WriteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                write();
            }
        });

写入的结果:

 

5.SQLite如何使用:

(1)一种关系型的数据库

(2)Android,windows和Linux上都可以直接使用

(3)免费开源

(4)在数据量较小的情况下,是一个很好的选择

例子:

布局文件:

 

 使用SQLite存储数据的JAVA程序:

   private Button createButton;
   private DataBaseHelper dbHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //数据库的类实例化,实例化数据库访问
        dbHelper=new DataBaseHelper(this,"userdatabase,db",null,1);  //第二个参数是数据库的名

        createButton=(Button)findViewById(R.id.creatButton);
        createButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getWritableDatabase();  //
            }
        });
    }
    public class DataBaseHelper extends SQLiteOpenHelper{
        public static final String Create_SQL="create table userinfo(id integer primary key autoincrement,username text,password text)";

        private Context mContext;

        public DataBaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){
            super(context,name,factory,version);
            mContext=context;
        }

        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {      //直接重写父类的方法
            sqLiteDatabase.execSQL(Create_SQL);
            Toast.makeText(mContext,"创建数据库成功",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

        }
    }

  

 运行结果:

 

posted @ 2017-12-26 18:08  小春熙子  阅读(219)  评论(0编辑  收藏  举报