android 数据存储


文件存储

适合存储一些没有进行格式化的文本数据。
Context中提供了一个openFileOutput方法将数据存储到指定的文件中,此文件接收两个参数一个是文件名,注意此文件名不需指定路径因为android中文件的存储路径都是/data/data//files/,第二个参数是指定文件的操作模式,一个是MODE_PRIVATE 和 MODE_APPEND ,前者是默认的操作模式,即存在相同文件名是 覆盖,后者是追加内容。
额 好像也没啥可以记录的

sharedPreferences

其实也是把数据存在文件之中,不过是以键值对的方式用xml的格式来存储。
要使用sharedPreferences要先获取sharedPreferences对象,一共有三种方式。
Context类中的getsharedPreferences(),此方法接收两个参数是指定文件名称,第二个则是指定操作模式,目前只有MODE_PRIVATE可用,相当于传0进去。
Activity类中的getPreferences这个方法接收一个参数,即操作模式,个人猜测Activiyity类是context的子类,这个方法其实最后调用的还是Context类中的那个方法,只是这里是将此活动的类名当成了context中的那个方法的第一个参数。
PreferenceManager类中的getDefaultsharedPreferences方法,此方法接收一个Context,并使用当前应用程序的包名作为前缀来命名sharedPreferences文件。

1.取得sharedPreferences对象后如何进行数据存储?

package com.example.sharedpreferencestest;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button saveData = (Button) findViewById(R.id.save_data);
        saveData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
                editor.putString("name", "Tom");
                editor.putInt("age", 28);
                editor.putBoolean("married", false);
                editor.apply();
            }
        });
        Button restoreData = (Button) findViewById(R.id.restore_data);
        restoreData.setOnClickListener(new View.OnClickListener() {
            @Override
            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);
                Log.d("MainActivity", "name is " + name);
                Log.d("MainActivity", "age is " + age);
                Log.d("MainActivity", "married is " + married);
            }
        });
    }

}

SQLite数据库存储

需要注意的是数据库存在后,就不会执行oncreate方法了,若要再建表则要通过onUpdate方法来实现。
我个人感觉用Litepal要舒服一些。

Litepal

采用对象关系映射的模式,对常用数据库操作进行封装,使得不编写一行sql语句就能完成各种建表和增删改查的操作。
将需要操作的表的各个列名设计为该表的类的各个属性值。
要使用litepal除了声明依赖还要将类添加到映射模型列表当中,并在manifest中注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值