zoukankan      html  css  js  c++  java
  • 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) {
    
            }
        }
    

      

     运行结果:

  • 相关阅读:
    师弟大喜之日,送上一幅对联 求横批
    漫画:Google 走了
    产品研发流程改进
    Outlook2010 Bug 一则
    Android 手机用户版本比例
    CDMA 短信中心号码
    UIM卡 PIN 码特点
    [Accessibility] Missing contentDescription attribute on image
    java打印函数的调用堆栈
    android中解析Json
  • 原文地址:https://www.cnblogs.com/hqutcy/p/8109606.html
Copyright © 2011-2022 走看看