日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中的数据存储方式

發布時間:2025/4/5 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中的数据存储方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android數據存儲的5中方式總結:

A:使用SharedPreferences存儲方式

B:文件存儲數據

C:SQLite數據庫存儲數據

D:使用ContentProvider存儲數據

E:網絡存儲數據

1.sharepreferences是Android平臺的一個輕量級的存儲類,只能保存少量數據,且這些數據的格式非常簡單:字符串、基本類型的值。主要用于保存一些常用的配置:比如窗口狀態,是否打開音樂、是否震動。解鎖密碼口令等等。

核心原理:保存基于XML文件存儲的key-value鍵值對數據,通常用來存儲一些簡單地配置信息。它對象本身只能獲取數據而不支持存儲和修改,存儲和修改是通過sharepreference.edit()獲取內部接口editor對象實現。他本是一個接口,程序無法直接創建他的實例,只能通過context提供getsharepreference(String name,int ?mode)方法獲取它name表示操作的xml文件名。第二個參數具體如下:


class ViewOcl implements View.OnClickListener{


? ? ? ? @Override
? ? ? ? public void onClick(View v) {

? ? ? ? ? ? switch(v.getId()){
? ? ? ? ? ? case R.id.btnSet:
? ? ? ? ? ? ? ? //步驟1:獲取輸入值
? ? ? ? ? ? ? ? String code = txtCode.getText().toString().trim();
? ? ? ? ? ? ? ? //步驟2-1:創建一個SharedPreferences.Editor接口對象,lock表示要寫入的XML文件名,MODE_WORLD_WRITEABLE寫操作
? ? ? ? ? ? ? ? SharedPreferences.Editor editor = getSharedPreferences("lock", MODE_WORLD_WRITEABLE).edit();
? ? ? ? ? ? ? ? //步驟2-2:將獲取過來的值放入文件
? ? ? ? ? ? ? ? editor.putString("code", code);
? ? ? ? ? ? ? ? //步驟3:提交
? ? ? ? ? ? ? ? editor.commit();
? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(), "口令設置成功", Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case R.id.btnGet:
? ? ? ? ? ? ? ? //步驟1:創建一個SharedPreferences接口對象
? ? ? ? ? ? ? ? SharedPreferences read = getSharedPreferences("lock", MODE_WORLD_READABLE);
? ? ? ? ? ? ? ? //步驟2:獲取文件中的值
? ? ? ? ? ? ? ? String value = read.getString("code", "");
? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(), "口令為:"+value, Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }}}}


2.文件存儲數據

?核心原理:Context提供了兩個方法來打開數據文件里的文件IO流

FileInputStream openFileInput(String name);

?FileOutputStream(String name , int mode),

這兩個方法第一個參數用于指定文件名,第二個參數指定打開文件的模式。

具體有以下值可選:

? ? ? ? ? ? ?MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可 ? 以使用Context.MODE_APPEND

? ? ? ? ? ? ?MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。

? ? ? ? ? ???MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;

? ? ? ? ? ? ?MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。

?除此之外,Context還提供了如下幾個重要的方法:

? ? ? ? ? ? ?getDir(String name , int mode):在應用程序的數據文件夾下獲取或者創建name對應的子目錄

? ? ? ? ? ? ?File getFilesDir():獲取該應用程序的數據文件夾得絕對路徑

? ? ? ? ? ? ?String[] fileList():返回該應用數據文件夾的全部文件 。

如果要對SD卡進行操作則:

讀寫sdcard上的文件

其中讀寫步驟按如下進行:

1、調用Environment的getExternalStorageState()方法判斷手機上是否插了sd卡,且應用程序具有讀寫SD卡的權限,如下代碼將返回true

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2、調用Environment.getExternalStorageDirectory()方法來獲取外部存儲器,也就是SD卡的目錄,或者使用"/mnt/sdcard/"目錄

3、使用IO流操作SD卡上的文件?

注意點:手機應該已插入SD卡,對于模擬器而言,可通過mksdcard命令來創建虛擬存儲卡

? ? ? ? ? ?必須在AndroidManifest.xml上配置讀寫SD卡的權限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

? 第三種:SQLite存儲數據 ? ? ? ? ?

SQLite是輕量級嵌入式數據庫引擎,它支持sql語言,并且只利用很少的內存就有很好的性能。主流的移動設備都以它作為復雜數據的儲存引擎。我們常用的方法不外乎添加,更新和刪除,也就是常說的增刪改查。

數據的添加

1.使用insert方法

1 ContentValues cv = new ContentValues();//實例化一個ContentValues用來裝載待插入的數據 2 cv.put("title","you are beautiful");//添加title 3 cv.put("weather","sun"); //添加weather 4 cv.put("context","xxxx"); //添加context 5 String publish = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 6 .format(new Date()); 7 cv.put("publish ",publish); //添加publish 8 db.insert("diary",null,cv);//執行插入操作

2.使用execsql方式實現

String ?sql = "insert into user(username,password) values ('jack Johnson','muisc' )"//插入語句

db.execSQL(sql);//執行sql語句


數據的刪除


同樣有2種方式可以實現

String whereClause = "username=?";//刪除的條件 String[] whereArgs = {"Jack Johnson"};//刪除的條件參數 db.delete("user",whereClause,whereArgs);//執行刪除

使用execsql方式實現

String sql = "delete from user where username= 'jack Johnson' ";//刪除操作

db.execSQL(sql);//執行刪除操作


數據修改

仍是2種方式

ContentValues cv = new ContentValues();//實例化ContentValues cv.put("password","iHatePopMusic");//添加要更改的字段及內容 String whereClause = "username=?";//修改條件 String[] whereArgs = {"Jack Johnson"};//修改條件的參數 db.update("user",cv,whereClause,whereArgs);//執行修改 使用execSQL方式的實現

String sql = "update user set password = 'music' where name = 'jack johnson'";修改內容

db.execSQL(sql);//執行修改


數據查詢


1 db.rawQuery(String sql, String[] selectionArgs); 2 db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); 3 db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 4 db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); ?其中:

  • table:表名稱
  • colums:表示要查詢的列所有名稱集
  • selection:表示WHERE之后的條件語句,可以使用占位符
  • selectionArgs:條件語句的參數數組
  • groupBy:指定分組的列名
  • having:指定分組條件,配合groupBy使用
  • orderBy:y指定排序的列名
  • limit:指定分頁參數
  • distinct:指定“true”或“false”表示要不要過濾重復值
  • Cursor:返回值,相當于結果集ResultSet

最后,他們同時返回一個Cursor對象,代表數據集的游標,有點類似于JavaSE中的ResultSet。下面是Cursor對象的常用方法:

1 c.move(int offset); //以當前位置為參考,移動到指定行 2 c.moveToFirst(); //移動到第一行 3 c.moveToLast(); //移動到最后一行 4 c.moveToPosition(int position); //移動到指定行 5 c.moveToPrevious(); //移動到前一行 6 c.moveToNext(); //移動到下一行 7 c.isFirst(); //是否指向第一條 8 c.isLast(); //是否指向最后一條 9 c.isBeforeFirst(); //是否指向第一條之前 10 c.isAfterLast(); //是否指向最后一條之后 11 c.isNull(int columnIndex); //指定列是否為空(列基數為0) 12 c.isClosed(); //游標是否已關閉 13 c.getCount(); //總數據項數 14 c.getPosition(); //返回當前游標所指向的行數 15 c.getColumnIndex(String columnName);//返回某列名對應的列索引值 16 c.getString(int columnIndex); //返回當前行指定列的值

實現代碼

String[] params = {12345,123456};
Cursor cursor = db.query("user",columns,"ID=?",params,null,null,null);//查詢并獲得游標 if(cursor.moveToFirst()){//判斷游標是否為空for(int i=0;i<cursor.getCount();i++){cursor.move(i);//移動到指定記錄String username = cursor.getString(cursor.getColumnIndex("username");String password = cursor.getString(cursor.getColumnIndex("password"));} }

通過rawQuery實現的帶參數查詢

Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable"); //Cursor c = db.rawQuery("s name, inventory FROM mytable where ID=?",new Stirng[]{"123456"}); result.moveToFirst(); while (!result.isAfterLast()) { int id=result.getInt(0); String name=result.getString(1); int inventory=result.getInt(2); // do something useful with these result.moveToNext(); } result.close(); 4.content provider存儲方式

?Content Provider為存儲數據和獲取數據提供了統一的接口,它可以完成在不同應用程序下的數據共享,而SQLite只能在同一個程序中共享數據。另外android為一些常見的數據,比如說音頻,視頻,圖片,通訊錄等提供了Content Provider,這樣我們就可以很方便的對這些類型的數據操作了。

? ? ? 使用ContentProvider的好處是開發人員不需要考慮數據內部是怎么存儲的,比如說如果我們想利用ContenProvider來存數據,只需告訴insert函數該ContentProvider的uri和想存入的數據(包括列名和數值),查詢時也是一樣,只需輸入Uri和查詢的表,列名和查詢條件,至于ContentProvider里面是怎么進行這些操作的我們不需要知道。


5.網絡存儲數據

通過網絡來獲取和保存數據資源,前提是需要設備保持網絡連接狀態。例子通過URL獲取文件的信息

  • public?class?Activity01?extendsActivity??
  • {??
  • ????/**?Called?when?the?activity?is?first?created.?*/??
  • ????@Override??
  • ????publicvoid?onCreate(Bundle?savedInstanceState)??
  • ????{??
  • ????????super.onCreate(savedInstanceState);??
  • ???????????
  • ????????setContentView(R.layout.main);??
  • ???
  • ????????TextView?tv?=new?TextView(this);??
  • ???????????
  • ????????String?myString?=null;??
  • ???????????
  • ????????try??
  • ????????{??
  • ????????????/*?定義我們要訪問的地址url?*/??
  • ????????????URL?uri?=?new?URL("http://192.168.1.110:8080/android.txt");??
  • ???????????????
  • ????????????/*?打開這個url連接?*/??
  • ????????????URLConnection?ucon?=?uri.openConnection();??
  • ???????????????
  • ????????????/*?從上面的鏈接中取得InputStream?*/??
  • ????????????InputStream?is?=?ucon.getInputStream();??
  • ???????????????
  • ????????????BufferedInputStream?bis?=?new?BufferedInputStream(is);??
  • ????????????ByteArrayBuffer?baf?=?new?ByteArrayBuffer(100);??
  • ????????????int?current?=?0;??
  • ????????????/*?一直讀到文件結束?*/??
  • ????????????while?((current?=?bis.read())?!=?-1)??
  • ????????????{??
  • ????????????????baf.append((byte)?current);??
  • ????????????}??
  • ????????????myString?=?new?String(baf.toByteArray());??
  • ????????}??
  • ????????catch?(Exception?e)??
  • ????????{??
  • ???
  • ????????????myString?=?e.getMessage();??
  • ????????}??
  • ????????/*?將信息設置到TextView?*/??
  • ????????tv.setText(myString);??
  • ???????????
  • ????????/*?將TextView顯示到屏幕上?*/??
  • ????????this.setContentView(tv);??
  • ???
  • ????}??
  • }??
  • 用到網絡的時候我們需要在xml里面加入權限


  • <uses-permission?android:name="android.permission.INTERNET"/> ?










  • 總結

    以上是生活随笔為你收集整理的Android中的数据存储方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。