一、文件存储

文件存储是一种较常用的方法,文件存储是Android中最基本的一种数据存储方式,与Java中的文件存储类似,都是通过I/O流的形式存储数据

Android中的文件存储分为内部存储和外部存储

  • 内部存储:将应用程序中的数据以文件方式存储到设备的内部,当内部存储创建的应用程序被卸载时,其内部存储文件也随之被删除
  • 外部存储:是将文件存储到一些外部设备上,例如SD卡或者设备内嵌外部存储的存储卡,属于永久性的存储方式

内部存储示例: 

package com.liu.fileio;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import java.io.FileInputStream;import java.io.FileOutputStream;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button but1 = findViewById(R.id.but_1);        Button but2 = findViewById(R.id.but_2);        but1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                EditText saveCun = findViewById(R.id.et_save);                String fileName = "data.txt";                String content = saveCun.getText().toString();                FileOutputStream fos;                try {                    fos = openFileOutput(fileName, MODE_APPEND);                    fos.write(content.getBytes());                    fos.close();                } catch (Exception e) {                    e.printStackTrace();                }            }        });        but2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                EditText readDu = findViewById(R.id.et_read);                String content = "";                FileInputStream fis;                try {                    fis = openFileInput("data.txt");                    //available()方法可以在读写操作前先得知数据流里有多少个字节可以读取                    byte[] buffer = new byte[fis.available()];                    fis.read(buffer);                    content = new String(buffer);                    fis.close();                } catch (Exception e) {                    e.printStackTrace();                }                String strread =  content;                readDu.setText(strread);            }        });    }}

界面: 

Android (安卓数据的五种存储方式)_第1张图片 openFileOutput 是Context的方法,如果你不是Activity就不能直接调用,而且MODE_PRIVATE要改为Context.MODE_PRIVATE。

二、SharedPreferences

是Android提供的用来存储一些简单的配置信息的一种机制。

  • SharedPreferences是Android平台上一个轻量级的存储类。
  • 用于存储应用程序的配置参数,如用户名、密码等。
  • 通过key/value(键值对)的形式将数据保存在XML文件中。
  • value值只能是float、int、long、boolean、String、StringSet类型数据。

简单用法: 

    /**     * 获取数据     */    private void read2() {        SharedPreferences sp = getSharedPreferences("data2",MODE_PRIVATE);        String data = sp.getString("name","不存在");//如果得不到值,则返回后面的不存在       EditText et = findViewById(R.id.et_read2);        et.setText(data);    }    /**     * 存入数据     */    private void save2() {        SharedPreferences sp = getSharedPreferences("data2",MODE_PRIVATE);        //获取编译器        SharedPreferences.Editor editor = sp.edit();        EditText et = findViewById(R.id.et_save2);        //存入数据        editor.putString("name",et.getText().toString());        editor.putInt("age",21);        //修改提交        editor.apply();    }

注意:

  • 获取数据的key值与存入数据的key值数据类型要一致,否则查找不到指定数据。
  • 保存SharedPreferences的key值时,使用静态变量保存,以免操作时写错,如private final String key=“itcast”。 

3、SQLite:数据库是Android自带的一个轻量级数据库,支持基本SQL语法。

  • 支持ACID的关系型数据库管理系统。ACID也就是原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)
  • SQLite保存数据时,支持Null(零)、Integer(整数)、Real(浮点数字),Text(字符串文本)、Blob(二进制对象) 五种数据类型
  • 重点掌握execSQL()和rawQuery()方法。

      execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句

      rawQuery()方法用于执行select语句

基本用法:

首先:

package com.liu.fileio;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import androidx.annotation.Nullable;public class SqlTest extends SQLiteOpenHelper {    private static final String DBName = "MyTestSQL";    //声明一个数据库名    private static final int VERISON = 1;           //声明一个数据库版本号    public SqlTest(Context context) {        super(context, DBName, null, VERISON);    }    /**     * 对数据库表进行初始化,只会在第一次创建数据库表时执行,并且只执行一次     * @param db     */    @Override    public void onCreate(SQLiteDatabase db) {        //创建表        String sql = "create table demo(name varchar(20), age integer)";        //执行SQl语句        db.execSQL(sql);    }    /**     *这个方法是进行数据版本的更新     * @param db     * @param oldVersion     * @param newVersion     */    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

 之后:

package com.liu.fileio;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class SqlDbTest {    public SqlTest st;       //获取SQLiterDatabase类的实例    public SQLiteDatabase db;//用这个类来进行增删改查    public SqlDbTest(Context context){        st = new SqlTest(context);        db = st.getWritableDatabase();     //获取SQLiterDatabase类的实例    }    public void InsetrDataforSQL(User user){        String sql = "insert into demo values(?,?)";        db.execSQL(sql,new Object[]{user.getName(),user.getAge()});    }    public User SelectData(){        User user = new User();        Cursor cs = db.rawQuery("select * from demo",null);//cursor:光标        while(cs.moveToNext()){            user.setName(cs.getString(cs.getColumnIndex("name")));            user.setAge(cs.getInt(cs.getColumnIndex("age")));        }        return user;    }    public void CloseDb(){        db.close();    }}

使用:

   private void read3() {        SqlDbTest sdt = new SqlDbTest(this);        User user = sdt.SelectData();        EditText et = findViewById(R.id.et_read3);        et.setText(user.getName().toString());        sdt.CloseDb();    }    private void save3() {        EditText et = findViewById(R.id.et_save3);        User user = new User(et.getText().toString(),22);        SqlDbTest sdt = new SqlDbTest(this);        sdt.InsetrDataforSQL(user);        sdt.CloseDb();    }

 

4、ContentProvider:是Android四大组件之一,可以将自己的数据共享给其他应用程序。
5、网络存储:是通过网络提供的存储空间来存储/获取数据信息。

 

 

 

更多相关文章

  1. 基于xml类型的压缩数据流的android获取天气的方法
  2. 最新android studio注意事项打不开等问题6种解决方法
  3. Android核心分析 --分析方法论探讨之设计意图
  4. 王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V
  5. 为android开放类增加自定义成员方法[转]
  6. Android安卓系统提示应用程序未安装的解决方法
  7. android 从文件制定位置读取数据
  8. Android---8---Intent及使用Intent传递数据
  9. Android 文件缓存方法

随机推荐

  1. Ubuntu连接Android真机调试
  2. Android点亮屏幕
  3. Android——编译系统初始化设置
  4. 【Android】 字体适配——不跟随系统字体
  5. android 自定义title
  6. Android assets 目录介绍和应用
  7. Android(安卓)ImageView的scaleType属性
  8. android 获取视频,图片缩略图
  9. 卸载eclipse中安装好的ADT
  10. Android connection refused