一、檔案方式
直接上代碼:
package com.fileop.demo.service;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import android.content.Context;import android.os.Environment;/** * 業務類 * @author sky * */public class FileService {private Context context;public FileService(Context context) {this.context = context;}/** * 以私人模式儲存檔案 * 會儲存到 /data/data/應用程式套件組合名/files/filename * @param filename * @param content * @throws Exception */public void save(String filename, String content) throws Exception {/* Context.MODE_PRIVATE 為預設操作模式 Context.MODE_APPEND 也是私人資料,但可以追加檔案 Context.MODE_WORLD_READABLE 表示當前檔案可以被其他應用所讀取 Context.MODE_WORLD_WRITEABLE 表示當前檔案可以被其他應用所寫入 如果希望檔案被其他應用讀和寫,可傳入 openFileOutput(filename, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);*/FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);outStream.write(content.getBytes());outStream.close();}/** * 讀取檔案 * @param filename * @return * @throws Exception */public String readFile(String filename) throws Exception{FileInputStream inStream = context.openFileInput(filename);byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream outStream = new ByteArrayOutputStream();while ((len = inStream.read(buffer)) != -1) {outStream.write(buffer, 0, len);}byte[] data = outStream.toByteArray();outStream.close();inStream.close();return new String(data);}/** * 儲存檔案到SDCard中 * 在SDCard中穿件與刪除檔案許可權: * <uses-permission android:name="android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> * 向SDCard中寫入資料許可權: * <uses-permission android:name="android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> * @param filename * @param content */public void saveToSDCard(String filename, String content) throws Exception{File file = new File(Environment.getExternalStorageDirectory(), filename);FileOutputStream outStream = new FileOutputStream(file);outStream.write(content.getBytes());outStream.close();}/** * 判斷sdcard是否存在於手機上,並且沒有防寫保護 * @return true 可用; false不可用 */public boolean isSDCardAvailable(){if(Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED)){return true;}return false;}}
二、SharedPreferences
package com.fileop.demo;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;public class SharedPreferencesDemo extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);SharedPreferences sp = this.getSharedPreferences("filename", Context.MODE_PRIVATE);Editor editor = sp.edit();editor.putInt("age", 12);editor.putString("name", "sky");editor.putBoolean("sex", true);editor.putFloat("money", 11.20F);editor.putLong("maxlife", 10000000000L);// 調用commit()之前資料都存在記憶體中// 調用之後存放在/data/data/應用程式套件組合名/shared_prefs/下editor.commit();//讀取sharedPreferences資料int age = sp.getInt("age", 0);String name = sp.getString("name", "");boolean sex = sp.getBoolean("sex", true);float money = sp.getFloat("money", 0.00F);long maxlife = sp.getLong("maxlife", 999999999999L);}}
三、資料庫
package com.db.demo;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper {private static final String DB_NAME = "demo.db";private static final int DB_VERSION = 1;public DBOpenHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {// 資料庫第一次被建立的時候被調用, 所以在此來完成表的建立String sql = "create table person (personid integer primary key autoincrement, name varchar(20))";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 資料庫版本發生改變時調用}}
package com.db.demo;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class PersonService {private DBOpenHelper dbOpenHelper;public PersonService(Context context) {dbOpenHelper = new DBOpenHelper(context);}public void insert(Person person) {// 如果要對資料變更,就調用getWritableDatabase()方法得到用於操作資料庫的執行個體,該方法以讀和寫的方式開啟資料庫SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL("insert into person(name) values(?)", new Object[] { person.getName() });}public void update(Person person) {SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL("update person set name=? where person", new Object[] { person.getName(), person.getId() });}public void delete(Integer id) {SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL("delete from person where personid=?", new Object[] { id.toString() });}public Person find(Integer id) {// 如果只對資料進行讀取,建議用getReadableDatabase()SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person where personid=?", new String[] { id.toString() });if (cursor.moveToFirst()) {int personId = cursor.getInt(cursor.getColumnIndex("personid"));String name = cursor.getString(cursor.getColumnIndex("name"));return new Person(personId, name);}return null;}public List<Person> getScrollData(Integer offset, Integer maxResult) {List<Person> persons = new ArrayList<Person>();SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person limit ?,?", new String[] {offset.toString(), maxResult.toString()});while(cursor.moveToNext()) {int personId = cursor.getInt(cursor.getColumnIndex("personid"));String name = cursor.getString(cursor.getColumnIndex("name"));Person person = new Person(personId, name);persons.add(person);}return persons;}public long getCount() {SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select count(*) from person", null);// 肯定有一條記錄, 所以不用if判斷cursor.moveToFirst();return cursor.getLong(0);}}
事物操作:
public void payment(){SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.beginTransaction(); // 事啟事務try {db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1});db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2});db.setTransactionSuccessful(); // 設定事務標誌為成功,當結束事務時就會提交事務} finally {db.endTransaction(); // 結束事物}}
待更新........