A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Android提供五种持久化数据存储的方式:Shared Preferences、Internal Storage、External Storage、SQLite Databases和Network Connection。

一、Shared Preferences

一个轻量级的存储类,特别适合用于保存软件配置参数。(是用xml文件存放数据,文件存放在/data/data//shared_prefs目录下)

SharedPreferences可以保存的数据类型有:int、boolean、float、long、String、StringSet。

Android数据持久化—SharedPreferences存储

二、Internal Storage

通过文件的形式将数据保存到手机内部存储空间中,并且这些文件是私有的,其他程序无法访问。当卸载掉程序之后,这些文件也会被相应移除。读写操作:

①写数据时,调用openFileOutput(String name, int mode)方法获得一个输出流,参数一是输出的文件名而输出文件的路径是系统自定的/data/data/…/files/;参数二是操作模式,主要有两种模式:Context.MODE_PRIVATE,覆盖原有的文件;Context.MODE_APPEND,内容追加到原来的文件上。

            FileOutputStream out = null;            BufferedWriter writer = null;            try{                out = openFileOutput("data", Context.MODE_PRIVATE);                writer = new BufferedWriter(new OutputStreamWriter(out));                writer.write(str);            }catch (IOException e){                e.printStackTrace();            }finally {                try{                    if(writer != null)                        writer.close();                }catch (IOException e){                    e.printStackTrace();                }            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

②读数据时,调用openFileInput(String name)方法获得一个输入流,由于路径由系统自定,所以参数就是要读取数据的文件名。

            FileInputStream in = null;            BufferedReader reader = null;            StringBuilder content = new StringBuilder();            try{                in = openFileInput("data");                reader = new BufferedReader(new InputStreamReader(in));                String line = "";                while((line = reader.readLine()) != null)                    content.append(line);            }catch (IOException e){                e.printStackTrace();            }finally {                if(reader != null){                    try{                        reader.close();                    }catch (IOException e){                        e.printStackTrace();                    }                }            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
三、External Storage

1.SDcard数据读写需要注定的先要在Androidmainfest.xml文件中注册新建删除和读写的权限 :

  <!-- 在SD卡上创建与删除权限 -->   <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />  <!-- 向SD卡上写入权限 -->   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 1
  • 2
  • 3
  • 4
  • 5

2.读写的基本流程就是:

2.1 通过Environment类的getExternalStorageState()方法来判断手机是否有SDcard: Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2.2 最通过getExternalStorageDirectory()方法来获取文件目录:File file = new File(Environment.getExternalStorageDirectory().getCanonicalPath() + “/test.txt”); 读写的文件都在sdcrad文件夹中 通过File Explorer可以导出来

2.3 其后就和基本IO操作相同了

四、SQLite Databasespublic class MyDatabaseHelper extends SQLiteOpenHelper {    public static final String CREATE_TIME = "create table Time(time date)";    private Context myContext;    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);        myContext = context;    }    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL(CREATE_TIME);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
date = new Date(System.currentTimeMillis());                str = simpleDateFormat.format(date);                SQLiteDatabase db = dbHelper.getWritableDatabase();                ContentValues values = new ContentValues();                values.put("time",str);                db.insert("Time",null,values);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
SQLiteDatabase db2 = dbHelper.getWritableDatabase();                Cursor cursor = db2.query("Time",null,null,                        null,null,null,null);                if(cursor.moveToFirst()){                    do{                        String tt = cursor.getString(cursor.getColumnIndex("time"));                        text4.setText(tt);                    }while(cursor.moveToNext());                }                cursor.close();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
五、Network Connection

2 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马