public class SimplePreferenceDemo extends Activity { private EditText nameText; private EditText ageText; public static final String PREFERENCE_NAME = "SaveSetting"; public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE; private SharePreferences mShared = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); nameText = (EditText)findViewById(R.id.name); ageText = (EditText)findViewById(R.id.age); mShared =getSharedPreferences(PREFERENCE_NAME, MODE); }
2)存储
private void write() {// 存入数据 String savename = nameText.getText().toString().trim(); int saveage = Integer.valueOf(ageText.getText().toString().trim()); Editor editor = mShared.edit(); editor.putString("Name", savename); editor.putInt("Age", saveage); // 保证操作的事务完整性 editor.commit(); }3)读取
private String read() {// 从XML文件里读取数据 String namecontent = mShared.getString("Name", "数据库里没有存储姓名"); int agecontent = mShared.getInt("Age", 0); String reading = "姓名:" + namecontent + "\n年龄:" + agecontent; return reading; }4)清除内容
private void clear() {//清除内容 /** 开始清除SharedPreferences中保存的内容 **/ Editor editor = mShared.edit(); editor.remove("Name"); editor.remove("Age"); editor.commit(); }5)删除文件
private void delete() {//删除文件 /** 删除SharedPreferences文件 **/ Filefile = new File("/data/data/<包名>" + "/shared_prefs/" + PREFERENCE_NAME+".xml"); if (file.exists()) { file.delete(); Toast.makeText(this, "删除成功", Toast.LENGTH_LONG).show(); } }二.File
INTEGER: 整数
REAL: 浮点数
TEXT: 字符串
BLOB: 大数据
2.代码实例(登录注册)
1)User.java(JavaBean)
含id,username,password,age,sex
2)DatabaseHelper.java(使用SQLiteOpenHelper抽象类建立数据库)
public class DatabaseHelper extends SQLiteOpenHelper { static String name="user.db"; static int dbVersion=1; public DatabaseHelper(Context context) { super(context, name, null, dbVersion); } //只在创建的时候用一次 public void onCreate(SQLiteDatabase db) { String sql= "create table user(id integer primary key autoincrement," + "username varchar(20),password varchar(20),age integer,sex varchar(2))"; //这个方法可用来执行非查询SQL指令 //这些指令没有结果,包括create table/drop table/insert db.execSQL(sql); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
3)UserService.java(实现对表的操作)
public class UserService { private DatabaseHelper dbHelper; public UserService(Context context){ dbHelper=new DatabaseHelper(context); } //登录用 public boolean login(String username,String password){ SQLiteDatabase sdb=dbHelper.getReadableDatabase(); String sql="select * from user where username=? and password=?"; Cursor cursor=sdb.rawQuery(sql, new String[]{username,password}); if(cursor.moveToFirst()==true){ cursor.close(); return true; } return false; } //注册用 public boolean register(User user){ SQLiteDatabase sdb=dbHelper.getReadableDatabase(); String sql="insert into user(username,password) values(?,?)"; Object obj[]={user.getUsername(),user.getPassword()}; sdb.execSQL(sql, obj); return true; } }
*关于Cursor
Android使用游标(Cursor)来导航查询结果;一个游标相当于一个简单的指针。
Cursor的常用方法:
moveToFirst | 将指针移到第一条数据上 |
moveToNext | 移到下一条 |
moveToPrevious | 移到上一条 |
getCount | 获取集合的数据数量 |
getColumnIndexOrThrow | 返回指定属性名称的序号,如果属性不存在,则产生异常 |
getColumnName | 返回指定序号的属性名称 |
getColumnNames | 返回所有属性名称的字符串数组 |
getColumnIndex | 根据属性名称返回序号 |
moveToPosition | 移到指定数据上 |
getPosition | 返回当前指针的位置 |
4)UserTest.java(测试类)
public class LoginActivity extends Activity { private User u; private UserService us; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); us = new UserService(this); Button btnRegister=(Button)findViewById(R.id.btnRegister);//注册按钮 btnRegister.setOnClickListener(new OnClickListener() { public void onClick(View v) { EditText etUsername = (EditText) findViewById(R.id.etUsername); EditText etPassword = (EditText) findViewById(R.id.etPassword); u = new User(); u.setUsername(etUsername.getText().toString()); u.setPassword(etPassword.getText().toString()); us.register(u); } }); Button btnLogin = (Button) findViewById(R.id.btnLogin);//登录按钮 btnLogin.setOnClickListener(new OnClickListener() { public void onClick(View v) { boolean flag = us.login(u.getUsername(),u.getPassword()); if(flag){ Log.i("登录结果","成功"); } else { Log.i("登录结果","失败"); } } });
四.ContentProvider
可以在不同应用程序之间提供统一的接口;
Android为一些数据提供了ContentProvider,包括音频、视频、图片和通讯录等
1.关于Uri
每个ContentProvider都拥有一个公共的Uri,这个Uri用于表示这个ContentProvider所提供的数据
2.所提供的函数
query():查询
insert():插入
update():更新
delete():删除
getType():得到数据类型
onCreate():创建时的回调函数
3.实现步骤
1)定义一个CONTENT_URI常量
2)定义一个类,继承ContentProvider
3)实现query,insert,update,delette,getType,onCreate方法
4)在AndroidMainfest.xml里注册声明
*关于ContentProvider的详细使用,请看后续博文。