android开发日记 ——avata项目

来源:互联网 发布:购买网站域名多少钱 编辑:程序博客网 时间:2024/05/23 14:23

12/21(周三)

今日进度:主要做的是关于UI界面完善,做出如下效果(类似于英汉字典的设计)

http://www.ophonesdn.com/article/show/111


实现:

TextWatcher mTextWatcher = new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {// TODO Auto-generated method stub}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable s) {// 必须将user_name字段的别名设为_idCursor 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);

最后还有一个CursorAdapter的重写,基本与英汉词典的相似(上有链接)

收获:

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);}
就是调用这个方法,通过用户名获取得到数据库中相应的密码。



dbHelper = new AvataDBHelperOnUser(getApplicationContext(), "userDB");
Cursor cursor = dbHelper.query(sp_name.trim());
这是在loginActivity中调用查询方法,获取到一个Cursor(游标)

而一般我这么写,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);}