android端的三种数据存储方式:
文件存储
SharedPreference存储
SQLite数据库存储
文件存储:
Context类提供了openFileOutput()的方法,通过java的输出流将数据存储到默认路径
/data/data//files/目录下
提供了InputFileOutput()的方法,通过java的读入流
一般的用户是访问不了手机,必须要有root权限才可以
所以这一部分的内容主要通过模拟器才能显示效果
案例:实现数据的保存和读取,按返回键之后不会消失
public class MainActivity extends Activity {
private EditText editText;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
//初始化
editText = (EditText)findViewById(R.id.editText);
String getinputText = load();
if(!TextUtils.isEmpty(getinputText)){
editText.setText(getinputText);
editText.setSelection(getinputText.length());
Toast.makeText(this, "Restore Success",
Toast.LENGTH_SHORT).show();
}
}
//保证在销毁之前保存数据
protected void onDestroy(){
super.onDestroy();
String inputText =editText.getText().toString();
savedata(inputText);
}
private void savedata(String inputText) {
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(writer!=null){
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//从默认的"data"读入,editText.setText(getinputText);
public String load(){
InputStream in =null;
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
in = openFileInput("data");
br = new BufferedReader(new InputStreamReader(in));
String line ="";
while((line=br.readLine())!=null){
sb.append(line);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return sb.toString();
}
}
SharedPreference存储
以键值对的方式存储数据
获取SharedPreference对象的三种方法:
1 Context类下的getSharedPreferences()
2 Activity类的getPreferences()
3 PreferenceManager类的getDefaultSharedPreferences()
得到对象之后
存储过程分三步实现:
1 调用SharedPreference对象下的edit()方法获取一个SharedPreference.Edit对象
SharedPreference.Editor editor =
getSharedPreferences(“data”,MODE_PRIVATE).edit();
2 添加数据
editor.putString(“name”,”Tom”);
3 提交数据commit()
editor.commit();
读取过程:
创建SharedPreferences pref = getSharedPreferences(“data”,MODE_PRIVATE);
String name = pref.getString(“name”,”“);
用getString(key,defaultValue),
getInt(key,defaultValue),
getBoolean(key,defaultValue)等方法
获取对应的数据
实现记住密码功能:
public class LoginActivity extends Activity {
private EditText accountEditText;
private EditText passwordEditText;
private Button loginButton;
//复选框控件
private CheckBox rememberPasswordBox;
//存储
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(LoginActivity.this);
accountEditText = (EditText) findViewById(R.id.account);
passwordEditText = (EditText) findViewById(R.id.password);
loginButton = (Button) findViewById(R.id.login_button);
rememberPasswordBox = (CheckBox) findViewById(R.id.check_password);
boolean rememberPassword = sharedPreferences.getBoolean("remember_password", false);
if(rememberPassword){
String account = sharedPreferences.getString("account", "");
String password = sharedPreferences.getString("password", "");
accountEditText.setText(account);
passwordEditText.setText(password);
rememberPasswordBox.setChecked(true);
}
loginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String account = accountEditText.getText().toString();
String password = passwordEditText.getText().toString();
if (account.equals("admin") && password.equals("admin")) {
editor = sharedPreferences.edit();
//复选框是否被勾中监听机制
if(rememberPasswordBox.isChecked()){
editor.putBoolean("remember_password", true);
editor.putString("account", account);
editor.putString("password", password);
}else{
editor.clear();
}
//别忘记提交
editor.commit();
// Toast.makeText(LoginActivity.this, "login success",
// Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this,SucessActivity.class);
startActivity(intent);
} else {
Toast.makeText(LoginActivity.this,
"account or password error", Toast.LENGTH_SHORT)
.show();
}
}
});
}
}
SQLite数据库存储:
SQLite是一种轻量级的关系型数据库
可以存储各种类型的文件
其操作和MySQL的语法基本相同
四种数据类型:
integer 整型 real浮点型 text 文本类型 blob 二进制型
创建数据库,插入一个表
先新建一个MyDatabase extends SQLiteOpenHelper
SQLiteOpenHelper是一个数据库管理器,负责对数据库的创建和表的创建,更新等操作
public class MyDatabase extends SQLiteOpenHelper {
public static final String CREATE_BOOK ="create table Book("
+ "id integer primary key autoincrement,"
+ "author text,"
+ "pages integer,"
+ "name text,"
+ "price real)";
//在这里随便添加语句,并在
//public void onUpgrade()更新,只有修改版本号大于旧版本号的时候才会进行更新操作
//
private Context mContext;
public MyDatabase(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
mContext = context;
}
//如果数据库已经创建,而且table也创建了,你下一次就不会重复执行这个方法了
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "create database success",
Toast.LENGTH_SHORT).show();
}
//只有当版本出现更新的时候才会进行调用这个方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
switch(oldVersion){
case 1:db.execSQL(CREATE_BOOK_CATEGORY2);
default:
}
}
}
接着在MainActivity中
public class MainActivity extends Activity {
// private MyDatabase dbHelper;
// protected void onCreate(Bundle savedInstanceState){
// super.onCreate(savedInstanceState);
// setContentView(R.layout.main_activity);
//
// //初始化数据库,创建数据库BookStore.db
// //改变版本号就可以
// //public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){};
// dbHelper = new MyDatabase(this, "BookStore.db", null,1);
//
// Button createdatabase =(Button)findViewById(R.id.button);
// createdatabase.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
// dbHelper.getWritableDatabase();
//
// }
// });
}
以下是一些在MainActivity的SQLite语句
添加,插入
// Button addData = (Button)findViewById(R.id.add);
// addData.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
// SQLiteDatabase db = dbHelper.getWritableDatabase();
// ContentValues values = new ContentValues();
//
// //开始组装数据
// values.put("name", "The Da Vinci Code");
// values.put("author", "Dan Brown");
// values.put("pages", 454);
// values.put("price",15);
//
// db.insert("Book", null, values);
// values.clear();
//
// values.put("name", "The Lost Symbol");
// values.put("author", "Dan Brown");
// values.put("pages", 510);
// values.put("price",19);
//
//
// db.insert("Book", null, values);
//
// Toast.makeText(MainActivity.this, "insert ok",
// Toast.LENGTH_SHORT).show();
//
// }
// });
修改
db.update("Book", values, "name=?", new String[]{"The Da Vinci Code"});
删除
//?占位符 1参数名称
// db.delete("Book", "id>?", new String[]{"1"});
查询
Button query = (Button)findViewById(R.id.query);
//
// query.setOnClickListener(new OnClickListener() {
//
// int count=0;
//
// @Override
// public void onClick(View v) {
// count++;
// // TODO Auto-generated method stub
// SQLiteDatabase db = dbHelper.getWritableDatabase();
//
// //查表自定义
// Cursor cursor = db.query("Book", null, null, null, null, null, null);
//
// if(cursor.moveToFirst()){//从第个迭代开始
// do{
// if(count>=2){
// break;
// }
// //遍历Cursor对象,取出数据并打印
// String name = cursor.getString(cursor.getColumnIndex("name"));
// String author = cursor.getString(cursor.getColumnIndex("author"));
// int pages = cursor.getInt(cursor.getColumnIndex("pages"));
// double price = cursor.getDouble(cursor.getColumnIndex("price"));
//
// Toast.makeText(MainActivity.this, "name: "+name+" author: "+author
// +" price: "+price+" pages: "+pages, Toast.LENGTH_SHORT).show();
//
//
// }while(cursor.moveToNext());
//
//
// }
// }
// });
代替,事务操作,特别是关于重要的数据操作,如银行
Button replace = (Button)findViewById(R.id.replace_data);
// replace.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
// SQLiteDatabase db = dbHelper.getWritableDatabase();
//
// db.beginTransaction();//开始事务
//
// try {
// db.delete("Book", null, null);
//// if(true){
//// //添加异常,使下面的操作不成功,事务失败
//// throw new NullPointerException();
//// }
//
// ContentValues values = new ContentValues();
// values.put("name", "Sb");
// values.put("author", "Mr.Sb");
// values.put("pages", 720);
// values.put("price", 80.3);
//
// db.insert("Book", null, values);
// db.setTransactionSuccessful();//事务执行成功
// } catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }finally{
// Toast.makeText(MainActivity.this, "replace ok",
// Toast.LENGTH_SHORT).show();
// db.endTransaction();//结束事务
//
// }
// }
// });