文件存储
适合存储一些没有进行格式化的文本数据。
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中注册。