Android 之数据存储(sdCard,sharedPreference,sqlite数据库)
sdCard:默认路径在 /storage/sdcard/...
<!-- 允许用户创建和删除sdcard卡上的内容 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<!-- 允许用户往sdcard卡上写入的内容 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
为了能单元测试,必须在应用程序的清单文件中添加工具instrument并在清单文件应用标签中注册单元测试库(图形化界面添加方便)
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.android_06storage"
- android:versionCode=""
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion=""
- android:targetSdkVersion="" />
- <!-- 添加读写授权 -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <instrumentation android:targetPackage="com.example.android_06storage" android:name="android.test.InstrumentationTestRunner"></instrumentation>
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <!-- 添加 -->
- <uses-library android:name="android.test.runner"/>
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
读取sdCard代码:
- package com.example.android_06storage;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import android.content.Context;
- import android.os.Environment;
- public class FileService {
- private Context context;
- public FileService() {
- // TODO Auto-generated constructor stub
- }
- public FileService(Context context) {
- // TODO Auto-generated constructor stub
- this.context=context;
- }
- /**
- *
- * @param fileName文件名
- * @param Content文件内容
- * @return
- * @throws Exception
- */
- public boolean saveContentToSdcard(String fileName,String Content) throws Exception{
- boolean flag=false;
- FileOutputStream fileOutputStream=null;
- File file=new File(Environment.getExternalStorageDirectory(),fileName);
- if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
- try {
- fileOutputStream=new FileOutputStream(file);
- fileOutputStream.write(Content.getBytes());
- flag=true;
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- finally{
- if(fileOutputStream!=null)
- fileOutputStream.close();
- }
- }
- return flag;
- }
- public String getDataFromSdcard(String fileName){
- FileInputStream fileInputStream=null;
- ByteArrayOutputStream out=new ByteArrayOutputStream();
- File file=new File(Environment.getExternalStorageDirectory(),fileName);
- if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
- try {
- fileInputStream=new FileInputStream(file);
- int len=;
- byte[] data=new byte[];
- while((len=fileInputStream.read(data))!=-){
- out.write(data, , len);
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(fileInputStream!=null)
- try {
- fileInputStream.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- return new String (out.toByteArray());
- }
- }
测试类:
- package com.example.android_06storage;
- import android.content.Context;
- import android.test.AndroidTestCase;
- import android.util.Log;
- public class myTest extends AndroidTestCase {
- private static final String TAG="myTest";
- public myTest() {
- // TODO Auto-generated constructor stub
- }
- public void saveFile() throws Exception{
- Context context=getContext();
- FileService fileService=new FileService(context);
- boolean flag=fileService.saveContentToSdcard("hello.txt", "你好 阳光");
- System.out.println(flag);
- Log.i(TAG, "---->>"+flag);
- }
- public void readFile() throws Exception{
- Context context=getContext();
- FileService fileService=new FileService(context);
- String msg=fileService.getDataFromSdcard("hello.txt");
- System.out.println(msg);
- Log.i(TAG, "---->>"+msg);
- }
- }
读取raw文件夹中获取文件:InputStream in = getResources().openRawResource(R.raw.a);
读取asset文件夹中获取文件:
- package com.example.android_06storage_sharedpreference;
- import java.util.HashMap;
- import java.util.Map;
- import android.content.Context;
- import android.content.SharedPreferences;
- public class SharedPreference {
- private Context context;
- public SharedPreference() {
- // TODO Auto-generated constructor stub
- }
- public SharedPreference(Context context) {
- // TODO Auto-generated constructor stub
- this.context=context;
- }
- public boolean SaveKVmessage(String name,String pwd){
- boolean flag=false;
- SharedPreferences share=context.getSharedPreferences("userinfo", context.MODE_PRIVATE);
- //对数据进行编辑
- SharedPreferences.Editor editor=share.edit();
- editor.putString("name", name);
- editor.putString("password", pwd);
- //完成编辑将数据持久化存储到存储介质中
- flag=editor.commit();
- return flag;
- }
- public Map<String,Object> ReadKVmessage(){
- Map<String,Object> map=new HashMap<String, Object>();
- SharedPreferences share=context.getSharedPreferences("userinfo", context.MODE_PRIVATE);
- String name=share.getString("name", "");
- String password=share.getString("password", "");
- map.put("name", name);
- map.put("password", password);
- return map;
- }
- }
测试类:
- package com.example.android_06storage_sharedpreference;
- import java.util.Map;
- import android.content.Context;
- import android.test.AndroidTestCase;
- import android.util.Log;
- public class MyTest extends AndroidTestCase {
- private static final String TAG="MyTest";
- public MyTest(){
- }
- public void save(){
- Context context=getContext();
- SharedPreference sharedPreference=new SharedPreference(context);
- boolean flag=sharedPreference.SaveKVmessage("admin", "");
- Log.i(TAG, "--->>"+flag);
- }
- public void Read(){
- Context context=getContext();
- SharedPreference sharedPreference=new SharedPreference(context);
- Map<String,Object> map=sharedPreference.ReadKVmessage();
- Log.i(TAG, "--->>"+map.toString());
- }
- }
SQLite数据库的存储:默认路径在 /data/data/...
SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:
1、轻量级:SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也很小。
2、独立性:SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。
3、隔离性:SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。
4、跨平台:SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。
5、多语言接口:SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。
6、安全性:SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
创建一个类,继承SQLiteOpenHelper
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。
SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数
onCreate()方法;// TODO 创建数据库后,对数据库的操作
onUpgrage()方法。// TODO 更改数据库版本的操作
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。
操作数据库的最佳实践是创建一个辅助类,例如联系人模块
class ContactsDatabaseHelper extends SQLiteOpenHelper
项目目录如下:
方法1:对于有sql经验的人而言,这种方式比较适合:
增删改 db.execSQL(sql) 查db.rawQuery(sql, params);
首先在db下创建一个DBOpenHelper类继承SQLiteOpenHelper
- package com.example.android_06sotrage_sqlite.db;
- import android.content.Context;
- import android.database.DatabaseErrorHandler;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- import android.database.sqlite.SQLiteOpenHelper;
- public class DBOpenHelper extends SQLiteOpenHelper {
- private static String name="mydb.db";//数据库名称
- private static int version=;//数据库版本号
- public DBOpenHelper(Context context) {
- super(context, name, null, version);
- // TODO Auto-generated constructor stub
- //虽然定义了数据库的名称和版本号,
- //但直到调用getReadableDatabase或getWritableDatabase的时候才最终生成数据库
- }
- /**
- * 当数据库创建的时候 是第一次被执行
- * 通常用来完成对数据库表的创建
- */
- @Override
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- //支持的数据类型:整型数据 字符串 日期类型 二进制数据类型
- String sql="create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";
- db.execSQL(sql);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- //原来版本创建时 是1 如果设置成>1的数字,则会更新数据库版本,这里只需要执行alter语句就行
- String sql="alter table person add sex varchar(8)";
- db.execSQL(sql);
- }
- }
然后在service包下建接口类
- package com.example.android_06sotrage_sqlite.service;
- import java.util.List;
- import java.util.Map;
- public interface PersonService {
- public boolean add(Object[] params);
- public boolean del(Object[] params);
- public boolean mod(Object[] params);
- public Map<String,String> find(String[] params);
- public List<Map<String,String>> findMore(String[] params);
- }
第三在dao包下建实现类
- package com.example.android_06sotrage_sqlite.dao;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
- import com.example.android_06sotrage_sqlite.service.PersonService;
- public class PersonDao implements PersonService {
- private DBOpenHelper helper=null;
- public PersonDao(Context context) {
- // TODO Auto-generated constructor stub
- helper=new DBOpenHelper(context);
- }
- @Override
- public boolean add(Object[] params) {
- // TODO Auto-generated method stub
- boolean flag=false;
- //SQLiteDatabase实现数据库的增删改
- SQLiteDatabase database=null;
- try {
- String sql="insert into person(name,address) values(?,?)";
- database=helper.getWritableDatabase();
- database.execSQL(sql,params);
- flag=true;
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return flag;
- }
- @Override
- public boolean del(Object[] params) {
- // TODO Auto-generated method stub
- boolean flag=false;
- SQLiteDatabase database=null;
- try {
- String sql="delete from person where id=?";
- database=helper.getWritableDatabase();
- database.execSQL(sql,params);
- flag=true;
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return flag;
- }
- @Override
- public boolean mod(Object[] params) {
- // TODO Auto-generated method stub
- boolean flag=false;
- SQLiteDatabase database=null;
- try {
- String sql="update person set name=?,address=? where id=?";
- database=helper.getWritableDatabase();
- database.execSQL(sql,params);
- flag=true;
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return flag;
- }
- @Override
- public Map<String, String> find(String[] params) {
- // TODO Auto-generated method stub
- Map<String, String> map=new HashMap<String, String>();
- SQLiteDatabase database=null;
- try {
- String sql="select * from person where id=?";
- database=helper.getReadableDatabase();
- Cursor cursor=database.rawQuery(sql, params);
- //数据库列的个数
- int col=cursor.getColumnCount();
- while(cursor.moveToNext()){
- for (int i = ; i < col; i++) {
- String col_name=cursor.getColumnName(i);
- String col_val=cursor.getString(cursor.getColumnIndex(col_name));
- if(col_val==null)
- col_val="";
- map.put(col_name, col_val);
- }
- }
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return map;
- }
- @Override
- public List<Map<String, String>> findMore(String[] params) {
- // TODO Auto-generated method stub
- List<Map<String, String>> list=new ArrayList<Map<String,String>>();
- SQLiteDatabase database=null;
- try {
- String sql="select * from person";
- database=helper.getReadableDatabase();
- Cursor cursor=database.rawQuery(sql, params);
- //数据库列的个数
- int col=cursor.getColumnCount();
- while(cursor.moveToNext()){
- Map<String, String> map=new HashMap<String, String>();
- for (int i = ; i < col; i++) {
- String col_name=cursor.getColumnName(i);
- String col_val=cursor.getString(cursor.getColumnIndex(col_name));
- if(col_val==null)
- col_val="";
- map.put(col_name, col_val);
- }
- list.add(map);
- }
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return list;
- }
- }
最后创建测试类:
- package com.example.android_06sotrage_sqlite.test;
- import java.util.List;
- import java.util.Map;
- import com.example.android_06sotrage_sqlite.dao.PersonDao;
- import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
- import com.example.android_06sotrage_sqlite.service.PersonService;
- public class MyTest extends android.test.AndroidTestCase{
- public MyTest() {
- // TODO Auto-generated constructor stub
- }
- public void createDB(){
- DBOpenHelper helper=new DBOpenHelper(getContext());
- helper.getWritableDatabase();//此时才真正创建了数据库
- }
- public void add(){
- PersonService service=new PersonDao(getContext());
- Object[] params={"mlj","xinxiang"};
- boolean flag=service.add(params);
- System.out.println("--->>"+flag);
- }
- public void del(){
- PersonService service=new PersonDao(getContext());
- Object[] params={};
- boolean flag=service.del(params);
- System.out.println("--->>"+flag);
- }
- public void mod(){
- PersonService service=new PersonDao(getContext());
- Object[] params={"mlj","huojia",""};
- boolean flag=service.mod(params);
- System.out.println("--->>"+flag);
- }
- public void find(){
- PersonService service=new PersonDao(getContext());
- String[] params={""};
- Map<String,String> map=service.find(params);
- System.out.println("--->>"+map.toString());
- }
- public void findMore(){
- PersonService service=new PersonDao(getContext());
- List<Map<String,String>> list=service.findMore(null);
- System.out.println("--->>"+list.toString());
- }
- }
方法2:对于其他人而言,这种方式比较适合,因为不用编写sql语句:
增 db.insert("表名", "列名", 值);
int insert(String table, String nullColumnHack, ContentValues values) 列名可以为空,当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),
为了防止这种情况,我们要在这里指定一个 列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。
值类似于map类型。
返回值为int,如果不等于-1,即表示成功插入
删 db.delete("表名", "不含where的条件字句", 字句中占位符的值);
int delete (String table, String whereClause, String[] whereArgs),返回值为最终影响的行数
改db.update("表名", 值,"不含where的条件字句", 字句中占位符的值);
int update (String table, ContentValues values, String whereClause, String[] whereArgs)返回值为最终影响的行数
查db.query(是否是唯一记录, "表名", 列名可以为空, 字句, 字句占位符的值, 分组可以为空, 过滤可以为空, 排序可以为空, 限制记录可以为空);
Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy,String limit)
DBOpenHelper类同上
新建接口类:
- package com.example.android_06sotrage_sqlite.service;
- import java.util.List;
- import java.util.Map;
- import android.content.ContentValues;
- public interface PersonService2 {
- public boolean add(ContentValues values);
- public boolean del(String whereClause,String[] whereArgs);
- public boolean mod(ContentValues values, String whereClause, String[] whereArgs);
- public Map<String,String> find(String selection,String[] selectionArgs);
- public List<Map<String,String>> findMore(String selection,String[] selectionArgs);
- }
第三在dao包下建实现类:
- package com.example.android_06sotrage_sqlite.dao;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
- import com.example.android_06sotrage_sqlite.service.PersonService2;
- public class PersonDao2 implements PersonService2 {
- private DBOpenHelper helper=null;
- public PersonDao2(Context context) {
- // TODO Auto-generated constructor stub
- helper=new DBOpenHelper(context);
- }
- @Override
- public boolean add(ContentValues values) {
- // TODO Auto-generated method stub
- boolean flag=false;
- long id=-;//返回最终结果值 如果不等于-1,即表示成功插入
- //SQLiteDatabase实现数据库的增删改
- SQLiteDatabase database=null;
- try {
- database=helper.getWritableDatabase();
- id=database.insert("person", null, values);
- flag=(id!=-?true:false);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return flag;
- }
- @Override
- public boolean del(String whereClause,String[] whereArgs) {
- // TODO Auto-generated method stub
- boolean flag=false;
- int count=;//最终影响的行数
- SQLiteDatabase database=null;
- try {
- database=helper.getWritableDatabase();
- count=database.delete("person", whereClause, whereArgs);
- flag=(count>?true:false);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return flag;
- }
- @Override
- public boolean mod(ContentValues values, String whereClause, String[] whereArgs) {
- boolean flag=false;
- int count=;//最终影响的行数
- SQLiteDatabase database=null;
- try {
- database=helper.getWritableDatabase();
- count=database.update("person", values, whereClause, whereArgs);
- flag=(count>?true:false);
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return flag;
- }
- @Override
- public Map<String, String> find(String selection,String[] selectionArgs) {
- // TODO Auto-generated method stub
- Map<String, String> map=new HashMap<String, String>();
- SQLiteDatabase database=null;
- try {
- database=helper.getReadableDatabase();
- /**
- * distinct 是否返回唯一值
- * table name表名
- * column name 设置为空 表明所有列
- * selection
- * selectionArgs
- * groupBy null
- * having null
- * orderBy null
- * limit null
- */
- Cursor cursor=database.query(true, "person", null, selection, selectionArgs, null, null, null, null);
- //数据库列的个数
- int col=cursor.getColumnCount();
- while(cursor.moveToNext()){
- for (int i = ; i < col; i++) {
- String col_name=cursor.getColumnName(i);
- String col_val=cursor.getString(cursor.getColumnIndex(col_name));
- if(col_val==null)
- col_val="";
- map.put(col_name, col_val);
- }
- }
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return map;
- }
- @Override
- public List<Map<String, String>> findMore(String selection,String[] selectionArgs) {
- // TODO Auto-generated method stub
- List<Map<String, String>> list=new ArrayList<Map<String,String>>();
- SQLiteDatabase database=null;
- try {
- database=helper.getReadableDatabase();
- Cursor cursor=database.query(false, "person", null, selection, selectionArgs, null, null, null, null);
- //数据库列的个数
- int col=cursor.getColumnCount();
- while(cursor.moveToNext()){
- Map<String, String> map=new HashMap<String, String>();
- for (int i = ; i < col; i++) {
- String col_name=cursor.getColumnName(i);
- String col_val=cursor.getString(cursor.getColumnIndex(col_name));
- if(col_val==null)
- col_val="";
- map.put(col_name, col_val);
- }
- list.add(map);
- }
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- finally{
- if(database!=null)
- database.close();
- }
- return list;
- }
- }
最后创建测试类:
- package com.example.android_06sotrage_sqlite.test;
- import java.util.List;
- import java.util.Map;
- import android.content.ContentValues;
- import com.example.android_06sotrage_sqlite.dao.PersonDao2;
- import com.example.android_06sotrage_sqlite.db.DBOpenHelper;
- import com.example.android_06sotrage_sqlite.service.PersonService2;
- public class MyTest2 extends android.test.AndroidTestCase{
- public MyTest2() {
- // TODO Auto-generated constructor stub
- }
- public void createDB(){
- DBOpenHelper helper=new DBOpenHelper(getContext());
- helper.getWritableDatabase();//此时才真正创建了数据库
- }
- public void add(){
- PersonService2 service=new PersonDao2(getContext());
- ContentValues values=new ContentValues();//类似于map
- values.put("name", "zhh");
- values.put("address", "henan");
- service.add(values);
- boolean flag=service.add(values);
- System.out.println("--->>"+flag);
- }
- public void del(){
- PersonService2 service2=new PersonDao2(getContext());
- /**
- * whereClause 条件字句
- * 原来sql语句是"delete from person where id=? "
- * 现在的字句不包含where关键字
- * whereArgs 字句中的参数列表
- */
- boolean flag=service2.del("id=?", new String[]{""});
- System.out.println("--->>"+flag);
- }
- public void mod(){
- PersonService2 service2=new PersonDao2(getContext());
- ContentValues values=new ContentValues();//类似于map
- values.put("name", "zhh");
- values.put("address", "jiaozuo");
- boolean flag=service2.mod(values, "id=?", new String[]{""});
- }
- public void find(){
- PersonService2 service2=new PersonDao2(getContext());
- Map<String,String> map=service2.find("id=?", new String[]{""});
- System.out.println("--->>"+map.toString());
- }
- public void findMore(){
- PersonService2 service2=new PersonDao2(getContext());
- //select * from person
- List<Map<String,String>> list=service2.findMore(null, null);
- System.out.println("--->>"+list.toString());
- }
- }
Android 之数据存储(sdCard,sharedPreference,sqlite数据库)的更多相关文章
- <Android基础> (六) 数据存储 Part 3 SQLite数据库存储
6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...
- Android中数据存储(三)——SQLite数据库存储数据
当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...
- Android 数据存储03之SQLite
SQLite数据存储 Android 集成了 SQLite 数据库.它存储在 /data/data/< 项目文件夹 >/databases/ 下.Android 开发中使用 SQLite ...
- Android本地数据存储复习
Android本地数据存储复习 Android无论是应用层还是系统层都需要在本地保存一些数据,尤其在应用层中使用的就更为普遍,大体有这么几种:SharedPreference,file,sqlite数 ...
- Android实现数据存储技术
转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...
- Android中数据存储(四)——ContentProvider存储数据
目录(?)[+] 当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...
- 关于Android开发数据存储的方式(一)
关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方 ...
- android中数据存储
android中数据存储 Android 中存储数据的方式有五种:SQLite数据库.文件存储.内容提供者.网络.SharedPreferences(Key----value)五种存储方式. ...
- Android中数据存储(一)
国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM ...
随机推荐
- 《CS:APP》二进制炸弹实验(phase_1-3)
<深入理解计算机系统>第三章的bomb lab,拆弹实验:给出一个linux的可执行文件bomb,执行后文件要求分别进行6次输入,每一次输入错误都会导致炸弹爆炸,程序终止.需要通过反汇编来 ...
- Nginx入门案例(Mac版)
Nginx(engine x)是一个轻量级.高性能的Web和反向代理服务器,也是一个IMAP.POP3和SMTP服务器,并且安装十分简单,配置文件非常简洁,启动特别容易,运行十分稳定,几乎可以做到7* ...
- 安全终端模拟工具Xshell 5使用密钥认证登录配置详细教程
▲版权声明:本文为博主原创文章,未经博主允许不得转载. Xshell支持SSH1 / SSH2协议,密码和DSA / RSA公钥用户认证方式等各种安全功能,并对各种加密算法进行加密.使用内置的Xshe ...
- Android SharedPreferences基本用法
使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类, 用来保存应用的一些常用配置. SharedPreferences与Editor简介 ...
- asp.net mvc 接入阿里大于 短信验证码发送
项目前端页面实例 第1步:登录阿里大于控制台 https://www.alidayu.com/center/user/account?spm=0.0.0.0.P1K1jG 第2步:创建应用 第3步:配 ...
- 新博客在SEO方面需要注意哪几点?
无论是什么程序的博客,都应该注意这重要的几点! 第一点:网站目标明确进入主题,有些人对于SEO不是特别熟悉,或者说没有接触过.当你做好一个网站,不管网站内容是什么,首先你都得了解最基本的SEO,比如网 ...
- CRF技能词识别过程
最近在用CRF做未登录技能词识别,虽然艰难,但是感觉很爽,效率非常高. (1)数据准备: 选取30000行精语料作为训练数据.每一个br作为一条数据.使用已有的技能词典对数据进行无标注分词. (2)训 ...
- geotrellis使用(三十一)使用geotrellis直接将GeoTiff发布为TMS服务
前言 传统上我们需要先将Tiff中存储的影像等数据先切割成瓦片,而后再对外提供服务.这样的好处是服务器响应快,典型的用空间来换时间的操作.然而这样造成的问题是空间的巨大浪费,一般情况下均需要存储1-1 ...
- Junit4的最简单例子
首先是JUnit的百度百科介绍: 接下来是JUnit4的最简单例子,使用的开发软件为Eclispe(里面集成了JUnit): 1.建立一个java project: 2.建立一个java class: ...
- 设置为互斥按钮的一组Radio按钮的用法
设置为互斥按钮的一组Radio,只需要将第一个Radio的Group属性设置为True,并为之映射变量(DDX),其余radio的Group属性设置为False,不需要映射变量. 否则会出现不是互斥按 ...