android开发日记 ——avata项目

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);

最后还有一个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);}





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值