android的存储方式有几种,android 本地存储的几种方式

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

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

1 使用SharedPreferences存储数据。

2 文件存储数据

3 SQLite数据库存储数据

一:

实现SharedPreferences存储的步骤如下:

一、根据Context获取SharedPreferences对象

二、利用edit()方法获取Editor对象。

三、通过Editor对象存储key-value键值对数据。

四、通过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()

{

try {

FileInputStream inStream=this.openFileInput("data.txt");

ByteArrayOutputStream stream=new ByteArrayOutputStream();

byte[] buffer=new byte[1024];

int length=-1;

while((length=inStream.read(buffer))!=-1)   {

stream.write(buffer,0,length);

}

stream.close();

inStream.close();

Toast.makeText(MyActivity.this,stream.toString(),Toast.LENGTH_LONG).show();

} catch (FileNotFoundException e) {

}

catch (IOException e){

}

}

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

加上权限

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);}//数据库没有创建才回调这个方法//用于数据库的表的创建@Overridepublic void onCreate(SQLiteDatabase db) {//创建数据库的一个使用的表db.execSQL(SQlite.CREATE_TABLE);}//版本变化时回调的方法,要求新版本大于旧版本呢!@Overridepublic 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";//用户的IDpublic 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了

要下班了,就不补充了啊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值