这是我可以说是第一次个人独立开发安卓应用,这里我将记录开发过程中遇到的问题。

好吧,刚开始就遇到一个比较纠结的问题。先来说说要做什么,ourtime是一个记录重要日期的工具,我的设定就是同步功能,几个人共享同一个列表或是一部分记录。关于要同步记录的问题我本来想采用同步配置文件的方式,因为服务器这个东西不是很好找,然后就采用了XML格式,后来又发现这个方式不够灵活,转用sqlite做存储,这样感觉好了很多。

下面列出我的几种方案,也是总结了网上的一些数据存储方案:

  1. 文件存取数据
  2. SQLite存取数据
  3. ContentProvider存取数据
  4. SharedPreferences存取数据

1.文件存取数据

关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中。

文件可用来存放大量数据,如文本、图片、音频等。

默认位置:/data/data/包名称/files/

这也是安卓默认文件保存的地址,包括使用自带数据库类默认的SQLite数据库也在这里../database/。

        publicvoid save()
         {
        try {
                    FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
                    outStream.write(text.getText().toString().getBytes());
                    outStream.close();
                    Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
                } catch (FileNotFoundException e) {
        return;
                }
        catch (IOException e){
        return ;
                }
         } 

2.SQLite存取

SQLite数据是存储在一个文件里的,安卓默认提供SQLite支持。
创建数据库:

db=SQLiteDatabase.openOrCreateDatabase("/data/data/包名/databases/data.db",null);

创建表:

        private void createTable(SQLiteDatabase db){  
           
              //创建表SQL语句  
              String table="create table table(id integer primary key autoincrement,name text)";  
           
              //执行SQL语句   
              db.execSQL(table);  
        }  

3.ContentProvider存取数据

ContentProvider的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。

当应用需要通过ContentProvider对外共享数据时,第一步需要继承ContentProvider并重写下面方法:

        public class PersonContentProvider extends ContentProvider{
                public boolean onCreate()
                public Uri insert(Uri uri, ContentValues values)
                public int delete(Uri uri, String selection, String[] selectionArgs)
                public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
                public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
            public String getType(Uri uri)
        }

第二步在AndroidManifest.xml使用对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider

        <manifest .... >
            <application android:icon="@drawable/icon" android:label="@string/app_name">
                <provider android:name=".PersonContentProvider" android:authorities="com.android.providers.provider"/>
            </application>
        </manifest>

4. SharedPreferences存取数据

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。

它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。

其存储位置在/data/data/包名称/shared_prefs目录下。

SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
实现SharedPreferences存储的步骤如下:   

  1. 根据Context获取SharedPreferences对象   
  2. 利用edit()方法获取Editor对象。  
  3. 通过Editor对象存储key-value键值对数据。   
  4. 通过commit()方法提交数据。
    publicclass MainActivity extends Activity {    
     @Override
    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
    //获取SharedPreferences对象
            Context ctx = MainActivity.this;       
            SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
    //存入数据
            Editor editor = sp.edit();
            editor.putString("STRING_KEY", "string");
            editor.putInt("INT_KEY", 0);
            editor.putBoolean("BOOLEAN_KEY", true);
            editor.commit();
    
    //返回STRING_KEY的值
            Log.d("SP", sp.getString("STRING_KEY", "none"));
    //如果NOT_EXIST不存在,则返回值为"none"
            Log.d("SP", sp.getString("NOT_EXIST", "none"));
         }
    }