菜鸟的android之路——数据存储相关

简单的数据存取

将数据存储到文件中

  Context类中提供了一个openFileOutput()的方法,可以用于数据存储到指定的文件中。
  out = openFileOutput("data",Context.MODE_PRIVATE);
  第一个参数是文件名,第二个参数是文件的操作模式。常用的操作模式有两种,MODE_PRIVATE表示使用相同文件名时,所写的内容会覆盖原文件的内容,MODE_APPEND表示如果该文件已存在就往文件中追加新内容,不存在则创建新文件。openFileOutput返回的是一个FileOutputStream对象,得到对象后直接使用JAVA流的方式写入文件即可。

  所有文件都是默认存储到data/data/<packagename>(包路径)/files/路径下。

    public void save(String inputText) {
        FileOutputStream out = null;  //声明一个输出流对象
        BufferedWriter writer = null; //声明一个缓冲区,不用将数据转换成数组,可以直接往程序外部写字符串
        try {
            out = openFileOutput("data", Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));//通过缓冲区向外输出数据
            writer.write(inputText);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (writer != null) {
                    writer.close();  //注意要关闭缓冲区
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

从文件中还原数据

  Context类中的openFIleInput()方法只接受一个参数,即要读取的文件名。
  in = openFileInput("data");系统会自动到/data/data/< package name>/files/下加载这个文件,返回一个FileInputStream对象。

    public String load() {
        FileInputStream in = null;    //声明一个输入流对象
        BufferedReader reader = null; //缓冲区
        StringBuilder content = new StringBuilder();
        try {
            in = openFileInput("data");
            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();
    }

  这里和存储数据的结构类似,但是多了一个StringBuilder对象,StringBuilder和String很类似,大家可以简单的理解为StringBuilder的运行速度比String要快,他的append方法就是往字符串后面继续加数据的意思。

SharedPreferences

  SharedPerferences是使用键值对的方式来存储数据的,而且SharedPerferences还支持多种不同数据存储,所以在使用期间它比简单的文件存储更为方便。

SharedPreferences的创建

  在使用SharedPerferences来存储数据时,首先需要获得SharedPerferences对象,这里给大家介绍三种获得SharedPerferences的方法:

Context类中的getSharedPreferences()方法

  此方法接收两个参数,第一个参数用于接受SharedPreferences文件的名字,如果不存在则创建一个。第二个参数用于指定的操作模式,操作模式一般有两个,MODE_PRIVATEMODE_PROCESS,前者为默认的操作模式,和直接传入0效果相同,表示只有当前应用可以访问这个文件。后者则表示会有多个进程对同一个SharedPrefrences进行访问。

Activity类的getPreferences()方法

  此方法只接受一个模式参数,则文件名字默认为当前活动的类名。

PreferenceManager类中的getDefaultSharedPreferences()方法

  这是一个静态方法,它接受一个context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPerferences文件。

SharedPerferences的存储

  得到了SharedPerferences对象之后,就可以开始向SharedPreferences文件中存储数据了。存储数据主要分三个步骤:
  1.调用SharedPerferences对象的edit()方法获取一个SharedPerferences.Editor对象。
  2.向SharedPerferences.Editor对象中添加数据,添加数据的方法主要有putBoolean(),putString()等,比较直观。
  3.调用commit()方法将添加的数据提交,完成数据存储操作。


public void onClick(View v) {
    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();//创建SharedPreferences+步骤1
    editor.putString("name", "Tom");                                      //步骤2
    editor.putInt("age", 28);
    editor.putBoolean("married", false);
    editor.commit();                                                      //步骤3
            } 
        });

SharedPerferences的读取

  SharedPerferences的读取非常简单,类似put方法,android给我们提供了一系列的get方法来读取SharedPerferences文件中的数据。

public void onClick(View v) {
        SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
        String name = pref.getString("name", "");
        int age = pref.getInt("age", 0);
        boolean married = pref.getBoolean("married", false);
            }
        });

SQLite数据库存储

创建数据库

  为了让我们更加方便的管理数据库,android专门提供了一个SQLiteOpenHelper帮助类来帮我们创建和升级我们的数据库。
  SQLiteOpenHelper是一个抽象类,同Activity一样,我们需要创建自己的帮助类去实现它,重写onCreate()与onUpgrade()方法。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_BOOK = "create table Book (" //SQL 语句
            + "id integer primary key autoincrement, " 
            + "author text, "
            + "price real, " 
            + "pages integer, " 
            + "name text)";

    private Context mContext;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

}

  关于SQL数据库存储内容非常多,这里也就不为大家进行太多的讲解,如果大家有需要了解的可以看我的收藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值