Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android數據存儲三劍客——SharedPreferences、File、SQLite

Android數據存儲三劍客——SharedPreferences、File、SQLite

編輯:關於Android編程

 Android中常用的數據存儲一般有三種方式:SharedPreferences、文件和SQLite數據庫,用來保存需要長時間保存的數據。本文將通過幾個具體的小實例來講解這三種方式的具體實現。       數據存儲之SharedPreferences:   SharedPreferences位於android.content包中,用於存儲少量簡單數據。其特點有:   1. 輕型的數據存儲方式   2. 基於xml文件的存儲方式,以 鍵/值 對的形式存儲數據   3. 存儲簡單的配置信息,支持的存儲類型有:Boolean、Float、Integer、Long、String等。     SharedPreferences存儲數據流程:     1. 獲取SharedPreferences對象:     private  SharedPreferences  prefs;     ①  //不指定存儲文件名,使用默認的名稱,即活動的類名稱     prefs = getPreferences(MODE_PRIVATE);     ② /*     *如果文件中的數據是Android應用程序中各個活動之間的共享數據,     *每個活動都能訪問,需要使用如下方式,獲取SharedPreferences:     * prefs = getSharedPreferences(“myPrefs”,MODE_PRIVATE);     */     ③ //也可以使用PreferenceManager     //PreferenceManager.setDefaultValues(this,R.xml.preferences,false);     //prefs = PreferenceManager.getDefaultPreferenceManagers(this);     2. 存儲數據(使用Editor對象,保存key-value值),讀取數據:     Editor editor = prefs.edit();     //存儲各種類型的數據     editor.putString(“name”,”Zhangsan”);     editor.putInt(“age”,18);     editor.putLong(“time”,System.currentTimeMillis);     //讀取數據     String name = prefs.getString(“name”);     int age = prefs.getInt(“age“);     3. 提交設置的數據,使數據保存到文件中:     在第2步中使用editor對象設置好key-value值後,數據並未保存到文件中,要保存還需提交     editor.commit();     4. 刪除保存的數據:     SharedPreferences.Clear();     說了這麼多,可能還是有些朋友說SharedPreferences到底是個什麼東東,下面個大家看看就明白了:               這下知道了吧,<string name=”user”>Zhangsan</string>就是用editor.putString(“user”,”Zhangsan”)設置的內容。使用DDMS可查看該文件位置,該文件存放在:           數據存儲之文件(File)存儲     使用SharedPreferences存儲文件比較方便簡單,但不能指定存儲文件的位置,存儲的內容也很少,使用文件存儲既可存儲到應用程序默認的放置文件的位置,也可存儲到外部存儲設備中,如外置SD卡中,可以減少占用手機內存,可以存儲比較大的文件。     文件的操作模式:                                   表1.  文件操作模式及說明   常量值   說明   MODE_PRIVATE   文件只能讓創建的應用程序訪問   MODE_WORLD_WRITEABLE   文件可讓其他應用程序寫入   MOED_WORLD_READABLE   文件可讓其他應用程序讀取   MODE_APPEND   文件若已存在,則在文件末尾寫入數據,不覆蓋原來文件內容     使用文件存儲的步驟:     1. 寫入文件     //以字符流的形式寫數據到文件     FileOutputStream out = openFileOutput(“out.txt”,MODE_PRIVATE);     String data = “123456abcdef”;     out.write(data);   //寫數據到文件     out.close();        //關閉文件輸出流     /*     * 也可使用OutputStreamWriter以字節流的形式寫入文件     * OutputStreamWriter writer = new OutputStreamWriter(out);     * writer.write(data);     * writer.flush();  //輸出流數據     * writer.close();  //關閉流     */     2. 讀取文件     FileInputStream fis = openFileInput("input.txt");     ByteArrayOutputStream out = new ByteArrayOutputStream();     byte[] buffer = new byte[1024];     int len = 0;     while ((len=fis.read(buffer))!=-1) {          out.write(buffer,o,len);       }       數據存儲之SQLite      Android使用SQLite數據庫引擎,它是包含的、事務型的數據庫引擎,無需單獨的服務線程。SQLite數據庫資源占用少、開源、功能強大,有以下特點:     1. 輕量級,使用一個動態庫,單個文件     2. 獨立性,沒有依賴,無需安裝     3. 隔離性,數據全在一個文件夾中     4. 跨平台,支持多種操作系統     5. 多語言接口,支持眾多編程語言     6. 安全性,支持事務處理。     7. 獨占性,使用共享鎖實現獨立事務處理,多個進程可同一時間從同意數據庫讀數據,但只有一個進程可寫數據。     SQLite支持的數據類型有:NULL、INTEGER、REAL、TEXT、BLOB類型。          SQLite存儲數據流程:     1. 獲取SQLiteDatabase數據庫對象     SQLiteDatabase db = openOrCreateDatabase(“user.db”,MODE_PRIVATE,null);     2. 執行增刪查改的數據操作語句     //創建一張表     db.execSQL(“create table if not exists contacts_tb(_id integer primary key autoincrement,name text not null,age integer not null)”);      //往數據庫裡插入一條數據     db.execSQL(“insert into contacts_tb(name,age)values(‘abc’,20)”);     db.execSQL(“insert into contacts_tb(name,age)values(‘cde’,18)”);     //查詢所有的數據,返回一個游標對象     Cursor cursor = db.raw(“select * from contacts_tb”,null);     /*     * 也可使用ContentValues執行SQL操作     * ContentValues values = new ContentValues();     * values.put(“name”,”aaa”);     * values.put(“age”,20);     * db.insert(“contacts_tb”,null,values);  //插入數據     * values.clear();     * values.put(“age”,18);     * //更新_id>2的數據項的屬性值     * db.update(“contactes_tb”,values,”_id>?”,new String[]{“2”});     * //刪除名字中含有’a’的項     * db.delete(“contacts_tb”,”name like ?”,new String[]{“%a%”});     * //查詢_id>0的項,按名字排序     * Cursor cursor = db.query(“contacts_tb”,null,”_id>?”,new String[]{“0”},null,null,name);     */          /*     * 使用SQLiteOpenHelper對象創建和管理數據庫     * 新建一個類DBOHelper extends SQLiteOpenHelper     * @override onCreate,onUpdate方法     * 使用DBOHelper對象     * DBOHelper helper = new DBOHelper(this,”user.db”);     * //創建或打開只讀數據庫     * SQLiteDatabase db = helper.getWriteableDatabase();     * //SQLiteDatabase db = helper.getReadableDatabase();     * 數據的操作和上邊都一樣     */     3.處理獲取的結果     String name[10] ;     int age[10];     int i=0;     while(cursor.moveToNext()){          name[i] = cursor.getString(cursor.getColumnIndex(“name”));          age[i] = cursor.getInt(cursor.getColumnIndex(“age”));          i++;     }     cursor.close();  //需手動關閉,否則會出現未知的異常     db.close();       //數據庫對象也要手動關閉         下面來個具體的實例,簡單實現下SQLite的數據存儲,用到了ListView數據綁定:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 DBHelper.java文件 public class DBHelper extends SQLiteOpenHelper{       public DBHelper(Context context, String name) {         super(context, name, null, 1);     }       @Override     public void onCreate(SQLiteDatabase db) {               }       @Override     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {               } }   Contact.java文件 public class Contact extends Activity{           private ListView lists;     SimpleAdapter adapter;     List<Map<String, Object>> dataList;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.layout_contacts);                   lists = (ListView) findViewById(R.id.contacts_list);         All_Contacts();       }             public void All_Contacts(){         dataList = new ArrayList<Map<String,Object>>();         adapter = new SimpleAdapter(Contact.this, dataList, R.layout.layout_contacts, new String[]{"_id","name","sex","phone" }, new int[]{R.id._id,R.id._name,R.id._sex,R.id._phone});                   DBHelper dbHelper = new DBHelper(Contact.this, "Contacts.db");         SQLiteDatabase db = dbHelper.getReadableDatabase();         Cursor cursor = db.rawQuery("select * from tb_persons", null);         cursor.moveToFirst();                   do {                           Map<String, Object> map = new HashMap<String, Object>();             map.put("_id", cursor.getInt(cursor.getColumnIndex("_id")));             map.put("name", cursor.getString(cursor.getColumnIndex("name")));             map.put("sex", cursor.getString(cursor.getColumnIndex("sex")));             map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));             dataList.add(map);                       }while(cursor.moveToNext());                   cursor.close();         db.close();                   lists.setAdapter(adapter);     } }   MainActivity.java文件 public class MainActivity extends Activity {       private Button btn_Add;     private Button btn_OK;     private Button btn_Cancel;           private EditText nameText;     private EditText sexText;     private EditText phoneText;           private LinearLayout info_Layout;     private SQLiteDatabase db;           @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                   btn_Add = (Button) findViewById(R.id.btn_add);         btn_OK = (Button) findViewById(R.id.btn_OK);         btn_Cancel = (Button) findViewById(R.id.btn_Cancel);                   nameText = (EditText) findViewById(R.id.name);         sexText = (EditText) findViewById(R.id.sex);         phoneText = (EditText) findViewById(R.id.phone);                   info_Layout = (LinearLayout) findViewById(R.id.info_form);                   DBHandler();     }     //輔助方法,打開添加聯系人信息區域     public void add_Contact(View v){         info_Layout.setVisibility(View.VISIBLE);         btn_Add.setEnabled(false);     }     //跳轉到查詢所有聯系人頁面     public void search_All(View v){         Intent intent = new Intent(MainActivity.this, Contact.class);         startActivity(intent);     }     //添加聯系人信息區域     public void insert_Info(View v){                   long id =0 ;                   String name = nameText.getText().toString().trim();         String sex = sexText.getText().toString().trim();         String phone = phoneText.getText().toString().trim();                   ContentValues values = new ContentValues();         values.put("name", name);         values.put("sex", sex);         values.put("phone", phone);                   db = openOrCreateDatabase("Contacts.db", MODE_PRIVATE, null);                           id = db.insert("tb_persons", null, values);         values.clear();         db.close();           nameText.setText("");         sexText.setText("");         phoneText.setText("");                   info_Layout.setVisibility(View.INVISIBLE);         btn_Add.setEnabled(true);         if (id==-1) {             Toast.makeText(this, "聯系人添加失敗!", Toast.LENGTH_SHORT).show();             return ;         }         Toast.makeText(this, "聯系人添加成功!", Toast.LENGTH_SHORT).show();     }     //清空添加信息框     public void cancel_Info(View v){         nameText.setText("");         sexText.setText("");         phoneText.setText("");                   info_Layout.setVisibility(View.INVISIBLE);         btn_Add.setEnabled(true);         Toast.makeText(this, "已取消添加!", Toast.LENGTH_SHORT).show();     }       //創建聯系人數據庫     private void DBHandler(){         //創建應用程序的數據庫         db = openOrCreateDatabase("Contacts.db", MODE_PRIVATE, null);         db.execSQL("create table if not exists tb_persons(_id integer primary key autoincrement,name text not null,sex text not null,phone text not null)");     } }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved