1、Android搜索历史的实现0918Android-搜索历史的实现-(2016-9-18)项目: SearchModel29 环境: Android Studio 1.0 源码JavaDBHelper.java /* * SQLite辅助类 */public class DBHelper extends SQLiteOpenHelper /* * 构造器 * param context */ public DBHelper(Context context) super(context, dbkeyword, null, 1); Override public void onCreate(SQL
2、iteDatabase db) / 创建: 建表+插入数 db.execSQL( create table kw(_id integer primary key autoincrement,keyword varchar,inputno integer); / 插入初始数据 db.execSQL(insert into kw (keyword,inputno) values(book,0); db.execSQL(insert into kw (keyword,inputno) values(书本,0); Override public void onUpgrade(SQLiteDatabas
3、e db, int oldVersion, int newVersion) / 升级 Kw.java /* * Created by 钧 on 2016/9/18. * 关键词实体类 */public class Kw public int id; public String keyword; public int inputno; public int getId() return id; public void setId(int id) this.id = id; public String getKeyword() return keyword; public void setKeyw
4、ord(String keyword) this.keyword = keyword; public int getInputno() return inputno; public void setInputno(int inputno) this.inputno = inputno; Override public String toString() return Kw + id= + id + , keyword= + keyword + + , inputno= + inputno + ; KwDao.java/* * Created by 钧 on 2016/9/18. * 封装对关键
5、词表的数据库访问操作 */public class KwDao public KwDao() public KwDao(Context context) this.context = context; private Context context; private String tablename = kw; /* * 判断数据库中是否存在key * param key * return */ public boolean contains(String key) List list = new ArrayList(); / 实例化 辅助类 DBHelper helper = new DBH
6、elper(context); / 获取SQLite数据库对象 SQLiteDatabase db = helper.getReadableDatabase(); / 执行查询命令,接收游标返回 Cursor cursor = db.rawQuery(select count(*) from +this.tablename + where keyword=+key+,null); int number = 0; while(cursor.moveToNext()/moveToNext:移动到下一行 number = cursor.getInt(0);/count(*) cursor.close
7、();/ 游标关闭 db.close();/ db关闭 if (number = 0) return false; else return true; /* * 插入一个全新的关键词 * param key * return */ public long insert(String key) DBHelper helper = new DBHelper(context); SQLiteDatabase db = helper.getReadableDatabase(); / 准备插入的数据 ContentValues values = new ContentValues();/ values.
8、put(keyword, key); values.put(inputno, 1); long id = db.insert(tablename, null, values);/ Log.i(spl, insert id= + id); db.close();/ 关闭连接 return id; /* * 增加某个关键词的使用频度 * param key */ public void update(String key) DBHelper helper = new DBHelper(context); SQLiteDatabase db = helper.getReadableDatabase(
9、); db.execSQL(update kw set inputno=inputno+1 where keyword=+key+); db.close();/ 关闭连接 /* * 根据用户的输入返回和这个词相关的关键词集合 * param key * return */ public List select(String key) List list = new ArrayList(); / 实例化 辅助类 DBHelper helper = new DBHelper(context); / 获取SQLite数据库对象 SQLiteDatabase db = helper.getReadab
10、leDatabase(); / 执行查询命令,接收游标返回 Cursor cursor = db.rawQuery(select * from +this.tablename + where keyword like %+key+% order by inputno desc LIMIT 10,null); while(cursor.moveToNext()/moveToNext:移动到下一行 Kw kw = new Kw(); kw.setId(cursor.getInt(0); kw.setKeyword(cursor.getString(1); kw.setInputno(cursor.
11、getInt(2); list.add(kw);/ 添加到集合 cursor.close();/ 游标关闭 db.close();/ db关闭 return list; MyAdapter.java/* * Created by uilubo on 2015/9/11. * 适配器 */public class MyAdapter extends BaseAdapter List list; LayoutInflater inflater; public MyAdapter(Context context) this.inflater = LayoutInflater.from(context
12、); public void setList(List list) this.list = list; Override public int getCount() return (list=null)?0:list.size();/ 三元运算 Override public Object getItem(int position) return list.get(position); Override public long getItemId(int position) return position; Override public View getView(final int posi
13、tion, View convertView, ViewGroup parent) ViewHolder holder = null; if(convertView = null) convertView = inflater.inflate(R.layout.item, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder); else holder = (ViewHolder) convertView.
14、getTag(); Kw item = list.get(position); holder.text.setText(item.getKeyword(); return convertView; public class ViewHolder TextView text; MainActivity.javapublic class MainActivity extends Activity implements AdapterView.OnItemClickListener ListView lv; EditText ed_input; KwDao dao; MyAdapter adapte
15、r; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); private void initData() adapter = new MyAdapter(this); lv.setAdapter(adapter); List list = dao.select(); updateListView(list); private vo
16、id initView() dao = new KwDao(this); ed_input = (EditText) findViewById(R.id.ed_input); lv = (ListView) findViewById(R.id.lv); lv.setOnItemClickListener(this); / 对输入框的改变进行实时监听 ed_input.addTextChangedListener(new TextWatcher() Override public void beforeTextChanged(CharSequence s, int start, int coun
17、t, int after) Override public void onTextChanged(CharSequence s, int start, int before, int count) Override public void afterTextChanged(Editable s) / 在用户输入之后, 按照输入显示建议列表 String key = ed_input.getText().toString(); List list = dao.select(key); updateListView(list); ); private void updateListView(Lis
18、t list) adapter.setList(list); adapter.notifyDataSetChanged(); public void btnClick(View v) / 插入到数据库中 String key = ed_input.getText().toString(); if (dao.contains(key) dao.update(key);/ +1 else dao.insert(key); / 新词条 Toast.makeText(this,查询:+key,Toast.LENGTH_SHORT).show(); Override public void onItemClick(AdapterView parent, View view, int position, long id) Kw kw = (Kw) parent.getItemAtPosition(position); Toast.makeText(this,查询:+kw.getKeyword(),Toast.LENGTH_SHORT).show(); ed_input.setText(kw.getKeyword(); / 执行查询 dao.update(kw.getKeyword();/ +1 xml布局Main item 清单
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2