Android__数据存储
2016-05-31 21:46
495 查看
android端的三种数据存储方式:
文件存储
SharedPreference存储
SQLite数据库存储
文件存储:
Context类提供了openFileOutput()的方法,通过java的输出流将数据存储到默认路径
/data/data//files/目录下
提供了InputFileOutput()的方法,通过java的读入流
一般的用户是访问不了手机,必须要有root权限才可以
所以这一部分的内容主要通过模拟器才能显示效果
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)等方法
获取对应的数据
实现记住密码功能:
SQLite数据库存储:
SQLite是一种轻量级的关系型数据库
可以存储各种类型的文件
其操作和MySQL的语法基本相同
四种数据类型:
integer 整型 real浮点型 text 文本类型 blob 二进制型
创建数据库,插入一个表
先新建一个MyDatabase extends SQLiteOpenHelper
SQLiteOpenHelper是一个数据库管理器,负责对数据库的创建和表的创建,更新等操作
public class MyDatabase extends SQLiteOpenHelper {
public MyDatabase(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
mContext = context;
}
}
文件存储
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();//结束事务 // // } // } // });
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件