首页 > 代码库 > Android数据持久化技术
Android数据持久化技术
每一款Android应用除了界面外,需要与用户进行交互,网络数据获取等功能。因此,数据的存储对应用来说也举足轻重。
Android数据存储有下面五种方式:
1> 文件存储
2> SharedPreferences存储
3> SQLite
4> ContentProvider
5> 网络存储
在这里,主要介绍前三种数据存储,即持久化存储。
1> 文件存储
将数据存储到文件中:
public void save(){ FileOutputStream out = null; BufferedWriter writer = null; out = openFileOutput("data",Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(text); }
最终文件data将保存在/data/data/<package_name>/files/目录下。
从文件读取数据:
public String read(){ FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try{ in = openFileInput("data"); reader = new BufferedReader(new InputStreamWriter(in)); String line = " " ; while((line = reader.readLine() != null){ content.append(line); } }catch (IOException e){ e.printStackTrace(); } return content.tostring(); }
2> SharedPreferences存储
不同于文件的存储,sharedPreferences的存储是采用键值对的形式实现的。
三种获取sharedPreferences对象的方法。
1> Context类中的getSharedPreferencds()方法
2> Activity类中的getPreferencds()方法
这个方法和Context类中的getSharedPreferencds()方法很类似,不过只接收一个操作模式参数,因为该方法会自动将当前活动的类名作为SharedPreferences的文件名。
3> PreferenceManager类中的getDefaultSharedPreferences()方法
这是一个静态方法,它接受一个context参数,并自动使用当前应用程序包名作为前缀命名SharesPreferences文件。
储存数据:
SharesPreferences.Editor editor = getSharesPreferences("data",MODE_PRIVATE).edit(); editor.putInt("age",18); editor.putString("name","Tom"); editor.apply();
读取数据:
SharedPreferences pref = getSharedPreferences("data","MODE_PRIVATE"); String name = pref.getString("name",""); Int age = pref.getInt("age","0");
SQLite数据库存储
Android为了更方便的管理使用数据库,提供了SQLiteOpenHelper帮助类。SQLiteOpenHelper是一个抽象类,定义了两个抽象方法:onCreate(),创建数据库;onUpgrade(),升级数据库。其中还有两个重要的实例方法,getReadableDatabase()和getWritableDatabase(),两个方法都可以创建或打开一个现有数据库,并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入时(比如磁盘空间已满),getReadableDatabase返回的对象将以读的方式去打开数据库,而getWritableDatabase方法将出现异常。
1> 新建类继承SQLiteOpenHelper
public class SQLHelper extends SQLiteOpenHelper { public SQLHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } public static final String CREATE_BOOK = "create table Book(" + "id integer primary key autoincrement," + "author text," + "price real," + "pages integer," + "name text)"; @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); Log.d("azheng","compelte!"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
2> MainActivity里创建数据库
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button mButton; private SQLHelper mSQLHeper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSQLHeper = new SQLHelper(this,"Book.db",null,1); mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.button: mSQLHeper.getWritableDatabase(); } } }
这样,数据库就写入成功了。
数据库操作:
增加:
SQLiteDatabase db = mSQLHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name","Tom"); values.put("age","18"); db.insert("Book",null,values);
更新数据库:
db.update("Book",values,""name = ? ,new String[] {"Tom"});
表示更新名字为Tom的数据。
删除:
db.delete("Book","page > ?",new String[] {"500"});
表示删除页数大于500的数据。
查找数据库:
select * from Book
查找命令相对来说比较多,且更复杂,需要在操作数据库的时候不断熟练。
Android数据持久化技术