您的位置:首页 > 移动开发 > Android开发

Android 应用程序数据持久化方法

2017-04-21 22:21 309 查看
一 、文件存储

public class MainActivity extends AppCompatActivity {
private EditText text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (EditText) findViewById(R.id.edit);

String inputText = load();
if(!TextUtils.isEmpty(inputText)){

text.setText(inputText);
text.setSelection(inputText.length());
Toast.makeText(this, "恢复成功!!!", Toast.LENGTH_SHORT).show();
}
}
//在活动销毁的时候保存数据到文件中
@Override
protected void onDestroy() {
super.onDestroy();
String input_text = text.getText().toString();
Save(input_text);
}

//保存数据到文件中
private void Save(String input_text) {

FileOutputStream fos = null;
BufferedWriter bw = null;

try {

fos = openFileOutput("data.txt", Context.MODE_PRIVATE);
bw =new BufferedWriter(new OutputStreamWriter(fos));
bw.write(input_text);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fos!=null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

//从文件中 加载恢复数据
private String load(){
FileInputStream fis = null;
BufferedReader br = null;
StringBuilder context = new StringBuilder();

try {
fis = openFileInput("data");
br = new BufferedReader(new InputStreamReader(fis));
String line =  "";

while((line =br.readLine())!= null){
context.append(line);
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return context.toString();
}
}


二、SharedPreference 保存数据

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//保存数据
Button save_data = (Button) findViewById(R.id.save_data);
save_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通过SharedPreferences 获取到edit对象    文件默认以 XML形式 存储
SharedPreferences.Editor editor =  getSharedPreferences("data",MODE_PRIVATE).edit();
//添加数据
editor.putString("name","Tom");
editor.putInt("age",18);
editor.putBoolean("married",false);
//应用
editor.apply();
}
});

//恢复数据
Button restore_data = (Button) findViewById(R.id.restore_data);
restore_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

// 获取到SharedPreferences对象
SharedPreferences spf = getSharedPreferences("data",MODE_PRIVATE);
//通过键 获取变量值
String name = spf.getString("name","");
int age  = spf.getInt("age",0);
boolean married = spf.getBoolean("married",false);

Toast.makeText(MainActivity.this, "name :"+name+" age :"+age +" married :" + married + " .", Toast.LENGTH_SHORT).show();
}
});

}
}


三、SQLite 数据库存储

首先 继承SQLiteOpenHelper 类 实现 onCreate和 onUpgrade 方法

public class MyDateBaseHelper extends SQLiteOpenHelper {

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

public static final String CREAATE_CATEGORY = "create table Category ("
+"id integer primary key autoincrement,"
+"category_name text" +
"category_code  integer )";

private  Context mContext;

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

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREAATE_BOOK);
db.execSQL(CREAATE_CATEGORY);
Toast.makeText(mContext, "数据库创建成功", Toast.LENGTH_SHORT).show();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//这个方法在 version大于之前数据库的version 才会执行
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
}


在MainActivity中创建数据库

public class MainActivity extends AppCompatActivity {

private MyDateBaseHelper dateBaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

dateBaseHelper = new MyDateBaseHelper(this,"MyBookStore.db",null,2);
Button create_dataBase = (Button) findViewById(R.id.create_database);
create_dataBase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取可写的数据库
dateBaseHelper.getWritableDatabase();
}
});
}
}


增删改查 操作核心代码

//获取当前的数据库
SQLiteDatabase db = dateBaseHelper.getWritableDatabase();

//插入数据
db.execSQL("insert into Book (name,author,pages,price) values(?,?,?,?)",new String[]{"The Code Life","John" ,"510","13.98" });

//更新数据
db.execSQL("update Book set price = ? where name = ?",new String[]{ "88.88","The Code Life"});

//删除数据
db.execSQL("delete from Book where pages > ?",new String[]{ "520" });

//查询数据
db.rawQuery("select * from Book",null);


=======使用 开源库 LitePal 操作数据库=========

参考 https://github.com/LitepalFramework/LitePal

1、添加依赖库

compile 'org.litepal.android:core:1.5.1'


2、配置litepal.xml文件 ,在app/src/main 下创建assets 文件夹 创建 litepal.xml文件 如下配置

<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--
定义应用的数据库名称默认以".db"结尾,
如果没有".db"结尾 LitePal 会自动添加
例如: <dbname value="demo" />
-->
<dbname value="demo" />

<!--
定义数据库的版本号,当你想升级数据库,只需在原有版本号增加1
-->
<version value="1" />

<!--
定义表的实例对象映射
例如:
<list>
<mapping class="com.test.model.Reader" />
<mapping class="com.test.model.Magazine" />
</list>
-->
<list>

</list>

<!--
定义 .db文件的存储位置
"internal" 表示内置内存中
"external" 表示外置存储卡
"internal" 为默认
例如:<storage value="external" />
-->

</litepal>


3、 修改AndroidManifest.xml 文件

<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>


4、创建Book实体类 Bean格式 getter和setter 方法

5、修改litepal.xml 文件

<list>
<mapping class="info.emotionalronan.litepaltest.Book" />

</list>


6、然后在按钮 点击中 调用 Connector.getDatabase(); 就可以创建数据库

7、 升级数据库只需要实体类 或者 修改litepal.xml 文件 添加

<list>
...
<mapping class="info.emotionalronan.litepaltest.Category" />

</list>


8、添加数据

Book book = new Book();
book.setName("The Da Life Code");
book.setAuthor("Dan Drown");
book.setPages(454);
book.setPrice(67.89);
book.setPress("Unknow");
book.save(); //保存数据


9、更新数据

Book book = new Book();
book.setPrice(88.88);
book.setPress("Anchor");
//通过条件 更新以上的数据
book.updateAll("name = ? and author = ?","The Da Life Code","Dan Drown");

//恢复 price 为  默认值
Book book = new Book();
book.setToDefault("price");
book.updataAll();


10 、删除数据

DataSupport.deleteAll(Book.class,"price < ?","12");


11、查询数据

//指定id 查找
Book book = DataSupport.find(Book.class, id);

//查找表book的所有
List <Book> books = DataSupport.findAll(Book.class);

// 条件查询
List<Book> books = DataSupport.where("name like ?", "book%").order("duration").find(Book.class);

//通过原生SQL查询  返回的是游标 需要用SQL的方法遍历
Cursor c = DataSupport.findBySQL("select * from Book where pages > ? and price < ? ", "400", "20");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 数据 存储