12/21(周三)
今日进度:主要做的是关于UI界面完善,做出如下效果(类似于英汉字典的设计)
实现:
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// 必须将user_name字段的别名设为_id
Cursor cursor = dbHelper.rawQuery("select user_name as _id from "
+ AvataDBHelperOnUser.TBNAME + " where user_name like ?",
new String[] { s.toString() + "%" });
UserSaveAdapter dictionaryAdapter = new UserSaveAdapter(
getApplicationContext(), cursor, true);
// actvWord是在Main类中定义的AutoCompleteTextView类型的变量
edt_login_username.setAdapter(dictionaryAdapter);
}
};
然后在LoginActivity中的onceate()方法里面为edittextview设置监听器
edt_login_username.addTextChangedListener(mTextWatcher);
收获:
1.学会了上面效果的实现,以及TextWatcher的使用
2.对SQLiteOpenHelper类的使用更加熟悉,另外,了解到直接实例化一个DBHelper对象不会调用DBHelper的onCreate()方法,只有在调用getWritableDatabase();或者getReadableDatabase()时才会调用oncreate方法!
12/22(周四)
今日进度:主要做的是关于UI界面完善,大部分时间都花在了Login界面的逻辑完善上!
问题:这个一个在通过调用自己重写的SQLiteOpenHelper类的查询方法时碰到的问题
// 数据库版本
private static final int VERSION = 1;
public static final String TBNAME = "user_information";
// 新建一个表
String sql = "create table if not exists " + TBNAME
+ "(user_name TEXT PRIMARY KEY,user_pwd TEXT)";
这里建了一张用户信息表,里面至存放了2个字段,用户名和密码.
public Cursor query(String user_name) {
SQLiteDatabase db = getReadableDatabase();
return db.query(TBNAME, new String[] { "user_pwd" }, "user_name=?",
new String[] { user_name }, null, null, null);
}
就是调用这个方法,通过用户名获取得到数据库中相应的密码。
Cursor cursor = dbHelper.query(sp_name.trim()); 这是在loginActivity中调用查询方法,获取到一个Cursor(游标)dbHelper = new AvataDBHelperOnUser(getApplicationContext(), "userDB");
而一般我这么写,cursor中只会存在一条数据,所以我想直接通过cursor.getString(0)获取密码的值,但是此时问题出现了
程序老是报异常常:{com.avata.mb.activity/com.avata.mb.activity.LoginActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
解决方案:在cursor.getString(0)之前必须加一句 cursor.moveToFirst(),让游标指向第一条数据!
细节决定成败啊!
收获:
1.熟悉了SQLiteOpenHelper的使用
2.温习了一下关于sharedPreference的使用:
//实例化一个SharedPreferences 对象
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
/** 以sharedpreferences的形式保存 */ private void save2sp(String name, Boolean name_ischecked, Boolean pwd_ischecked, Boolean com_ischecked, Boolean exa_ischecked) { SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("is_saved", true); editor.putBoolean("name_ischecked", name_ischecked);// 用户名 editor.putBoolean("pwd_ischecked", pwd_ischecked);// 密码 editor.putBoolean("com_ischecked", com_ischecked); // 编辑 editor.putBoolean("exa_ischecked", exa_ischecked); // 审核 editor.putString("username", name); editor.commit(); }
//获取SharedPreferences 对象里面的数据
private void getDataFromSp() { settings = getSharedPreferences(PREFS_NAME, 0); boolean is_saved = settings.getBoolean("is_saved", false);}