身为一个android码农,我认为最常见的的两种数据存储:本地存储和网络存储

那么本地存储有哪些方式呢?分别如何实现呢?下面跟大家细说android的几种存储方式和实现方法

1 使用SharedPreferences存储数据。

2 文件存储数据

3 SQLite数据库存储数据







一:



实现SharedPreferences存储的步骤如下:

四、通过commit()方法提交数据。


public class MainActivity extends Activity {     
  
 @Override 
   
     public void onCreate(Bundle savedInstanceState) { 
    
        super.onCreate(savedInstanceState); 
     
        setContentView(R.layout.main); 
      
         
       
        //获取SharedPreferences对象 
        
        Context ctx = MainActivity.this;        
         
        SharedPreferences sp = ctx.getSharedPreferences("data", MODE_PRIVATE); 
          
        //存入数据 
           
        Editor editor = sp.edit(); 
            
        editor.putString("name", "张三"); 
             
        editor. 
              putString 
              ("sex", "男"); 
              
        editor. 
               putString 
               ("old","25"); 
               
        editor.commit(); 
                
         
                 

                           //取值 
                 
 
                 

                           Sting name= sp.getString("name","");//后面的参数是未取到值得时候返回的值 
                 
 
                 
        Sting name= sp.getString("sex",""); 
                  
 
                 
        Sting name= sp.getString("old","");
 
                 
        Log.e("text:","name:"+name+"sex"+sex+"old"+old);
 
                 
   
                   
     } 
                      
  
                       

                         }







第二种: 文件存储数据



并不是很常见哦



public void down() 
                        
 { 
                         
  
                          
        try { 
                           
            FileOutputStream outStream=this.openFileOutput("data.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) { 
                                
             
                                 
        } 
                                  
        catch (IOException e){ 
                                   
             
                                    
        } 
                                     
  
                                      

                                         }





Context.MODE_WORLD_READABLE为默认模式,该模式是只有当前应该可以读取该文件,如果想让其他应用需要读取,可以把模式换成Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE






读取文件的方法



public void loading() 
                                       
data.txt"); 
                                          
  while((length=inStream.read(buffer))!=-1)   { 
                                              
stream.toString(),Toast.LENGTH_LONG).show(); 
                                                     

                                                              }



因为这个没有写入SD卡,所以比较大的文件建议写入SD卡。



加上权限



 <!-- 在SDCard中创建与删除文件权限 -->

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







File sdCardDir = new File("/sdcard"); //获取SDCard目录 
                                       
  
                                        
File saveFile = new File(sdCardDir, "data.txt"); 
                                         
  
                                          
//上面两句代码可以合成一句: 
                                           
  
                                            
File saveFile = new File("/sdcard/a.txt"); 
                                             
  
                                              
FileOutputStream outStream = new FileOutputStream(saveFile); 
                                               
  
                                                
outStream.write("test".getBytes()); 
                                                 
  
                                                  

                                                    outStream.close();









SQLite数据库存储数据



这种也比较常见,个人感觉也比较方便哦



public class MySqliteOpenHelper extends SQLiteOpenHelper {

    //构造方法
    //第一个参数是上下文的意思
    //第二个参数是数据库的名称
    //第三个参数是游标工厂,一般使用null就可以
    //第四个参数是版本号
    public MySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //数据库没有创建才回调这个方法
    //用于数据库的表的创建
    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建数据库的一个使用的表
        db.execSQL(SQlite.CREATE_TABLE);
    }

    //版本变化时回调的方法,要求新版本大于旧版本呢!
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //删除数据库的表,再创建数据库的表
        db.execSQL(SQlite.DELETE_TABLE);
        onCreate(db);
    }


    //定义一个数据库的基本信息,包括一些基本的使用语句
    static class SQlite {
        public static final String DB_NAME = "Test.db";//数据库名称

        public static final String TABLE_NAME = "userInfo";//要操作的表的名称

        //表格里面的数据
        public static final String ID = "_id";//用户的ID

        public static final String USER_TIME = "time";//用户的姓名

        public static final String USER_CONTEXT = "context";//用户的年龄

        public static final String USER_NUMBER = "number";//用户的性别

        //创建表格使用的SQL语句
        public static final String CREATE_TABLE = "create table " + TABLE_NAME + " (" + ID + " integer primary key autoincrement," + USER_CONTEXT + " text not null," + USER_NUMBER + " text not null," + USER_TIME + " text not null"+ ")";

        //删除表格使用的语句
        public static final String DELETE_TABLE = "drop table if exists " + TABLE_NAME;
    }

}



在Activity中MySqliteOpenHelper helper = new MySqliteOpenHelper(context, MySqliteOpenHelper.SQlite.DB_NAME, null, 1);
//获得数据库对象helper.get...
//可读,并且可写---的数据库:   磁盘满的情况,写不进去,不写了,一般情况使用这个
*//*db = helper.getReadableDatabase();
这是查询出值



private void select() {
    list.clear();
    //先清除页面上的数据
    //再加载数据库的数据
    //这里查询所有的数据,只需要一个表名就可以了,后面的条件可以不写,获得的是一个结果集
    Cursor cursor = db.query(MySqliteOpenHelper.SQlite.TABLE_NAME, null, null, null, null, null, null);
    //结果集指向的表头前面.moveToNext()来指向下一个结果
    while (cursor.moveToNext()) {
        //获取结果集里面的数据
        //cursor.getColumnIndex()获取列名所在的列号
        infobean phone = new infobean();
        //这里通过列号来获取数据
        phone.setTime(cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_TIME)));
        phone.setContext(cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_CONTEXT)));
        phone.setNumber(cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_NUMBER)));
        //把找到的数据添加到List集合中
        list.add(phone);
    }
    
}






SQLlist 这个存储方法还挺常用,这都是从我代码中拷出来的,大家需要用的时候把列明改下就OK了
要下班了,就不补充了啊