把用户输入的内容保存到数据库表中,然后用户输入时,进行模糊查询并把查询结果附到AutoCompleteTextView中。

1:activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <AutoCompleteTextView
android:id="@+id/actValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:singleLine="true"/> <Button
android:id="@+id/btnClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click"/> </LinearLayout>

2:DbUtil.java

package com.example.autotest;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class DbUtil extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 10; //当前数据库版本
private static final String DATABASE_NAME = "wzh.db"; private static final String TABLE_AUTO = "auto"; //国税邮件表 private static final String CREATE_TABLE_AUTO_SQL = "create table " +
TABLE_AUTO + "( _id integer primary key autoincrement, "+
" value varchar)"; public DbUtil(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
} /*
* 数据库第一次被创建时调用onCreate
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_AUTO_SQL);
} /*
* 如果 DATABASE_VERSION 改变 系统会调用onUpgrade
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_AUTO); onCreate(db);
}
}

3:DBManager.java

package com.example.autotest;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; public class DBManager {
private DbUtil dbUtil = null;
private SQLiteDatabase db = null; public DBManager(Context context){
dbUtil = new DbUtil(context);
db = dbUtil.getWritableDatabase();
} public boolean valueExist(String value){
int count = 0;
Cursor c = db.rawQuery("select _id from auto where value = ?",
new String[]{value});
if(c.moveToNext()){
count = c.getInt(c.getColumnIndex("_id"));
}
c.close();
return count>0?true:false;
} public void addAutoValue(String value){
if(value!=null && value.length()>0){
db.beginTransaction();
try{
String sql = "insert into auto(_id,value) values(null,?)";
db.execSQL(sql, new Object[]{value});
db.setTransactionSuccessful();
}finally{
db.endTransaction();
}
}
} public Cursor selectAutoValues(String value){
String sql = "select _id,value from auto where value like ? limit 10";
Cursor c = db.rawQuery(sql, new String[]{"%"+value+"%"});
return c;
} /**
* 关闭数据连接资源
*/
public void dbClose(){
if(null != db){
db.close();
}
}
}

4:AutoCompleteAdater.java

package com.example.autotest;

import android.content.Context;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter; public class AutoCompleteAdater extends SimpleCursorAdapter{
private DBManager dbManager = null;
private Context context; // 查询字段
private String value; @SuppressWarnings("deprecation")
public AutoCompleteAdater(Context context, int layout, Cursor c,String from, int to) {
super(context, layout, c, new String[] { from },new int[] { to });
this.context = context;
this.value = from;
} /**
* 动态查询数据库
*/
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
if (constraint != null) {
return getDbManager().selectAutoValues((String) constraint);
} else {
return null;
}
} /**
* 这里设置在弹出的提示列表中点击某一项后的返回值,返回值将被显示在文本框中
*/
@Override
public CharSequence convertToString(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(value));
} public DBManager getDbManager(){
return dbManager==null?new DBManager(this.context):dbManager;
}
}

5:MainActivity.java

package com.example.autotest;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.Button; public class MainActivity extends Activity {
private AutoCompleteTextView actValue = null;
private Button btnClick = null;
private DBManager dbManager = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); actValue = (AutoCompleteTextView) findViewById(R.id.actValue);
btnClick = (Button)findViewById(R.id.btnClick); AutoCompleteAdater cursorAdapter = new AutoCompleteAdater(
this,
android.R.layout.simple_dropdown_item_1line,
null,
"value",
android.R.id.text1
);
actValue.setAdapter(cursorAdapter); dbManager = new DBManager(this); btnClick.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
String value = actValue.getText().toString();
dbManager.addAutoValue(value);
}
});
} @Override
protected void onDestroy() {
super.onDestroy();
if(dbManager!=null){
dbManager.dbClose();
}
}
}
java.lang.Object
   ↳ android.view.View
     ↳ android.widget.TextView
       ↳ android.widget.EditText
         ↳ android.widget.AutoCompleteTextView

  可以看出AutoCompleteTextView继承自EditText,所以它实际上也是一个文本编辑框,只是多了一个自动提示补全功能,EditText的所有功能AutoCompleteTextView都能实现,其对EditTextAPI进行了丰富。

AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示的更多相关文章

  1. jquery+php实现用户输入搜索内容时自动提示

    index.html <html> <head>     <meta charset=;} #search_auto li a:hover{background:#D8D ...

  2. js打印保存用户输入的内容

    在用js打印局部页面时,遇到用户新输入的内容没能打印出来,经过观察,发现我采用的js打印方法是读取页面源代码,而用户输入的内容如果不将其写入到页面源代码中去,是打印不出来的,下面是我的解决方法: // ...

  3. 大量无线键盘存在KeySniffer漏洞-可嗅探用户输入的内容

    几美元的一根天线.一个无线发射器,还有几行Python代码,有了这些,黑客就可以在几十米开外主动地记录下你的用户名.密码.信用卡.你写的稿子,总之就是你用无线键盘输入的任何东西. 黑客所利用的是一种无 ...

  4. 【Android工具类】用户输入非法内容时的震动与动画提示——EditTextShakeHelper工具类介绍

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 当用户在EditText中输入为空或者是数据异常的时候,我们能够使用Toast来提醒用户,除此之外,我们还能 ...

  5. SQL Server 2008 r2 输入SQL语句不能自动提示的解决办法

    先利用“配置工具-SQL Server 配置管理器”关闭所有MSSQLSERVER服务,利用SQL Server Installation Center,进入Maintenance,选择Repair, ...

  6. 防御XSS攻击-encode用户输入内容的重要性

    一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...

  7. mailto实现将用户在网页中输入的内容传递到本地邮件客户端

    背景: 想在自己的网站中有这样一个设计: 用户点击提交按钮之后,就会打开本地邮件客户端,并自动将他在输入框中输入的内容作为邮件的内容,像下面这样: mailto可以帮助实现这个功能. 简介: mail ...

  8. Python学习【第四篇】用户输入及判断

    用户输入: 例1.写一个用户输入密码的小程序,流程如下: 1.用户输入自己的用户名 2.打印"Hello+用户名" #!/usr/bin/env python #name = ra ...

  9. 微信小程序 获得用户输入内容

    在微信小程序里,如何获得用户输入的内容?? js: document.getElementById("Content").value jq:$("#Content&quo ...

随机推荐

  1. GridView 中Item项居中显示

    直接在GridView中设置 android:gravity="center"这个属性是不起作用的.要在你adapter中的布局文件中设 置android:layout_gravi ...

  2. MongoDB再实测

    不用安装,直接解压.. 这些都不是最主要的,,,倒是TOMCAT和NGINX还需要更深入的了解... http://jingyan.baidu.com/article/acf728fd3d398bf8 ...

  3. Unity3D中的工具类

    1.时间:Unity提供了Time类,这个类主要用来获取当前的系统时间. Time.time:从游戏开始后开始计时,表示截止目前共运行的游戏时间. Time.deltaTime:获取Update()方 ...

  4. NSIS Installer(被NSI脚本编译出来的target)获取命令行参数

    References: http://stackoverflow.com/questions/6185982/accessing-command-line-arguments-in-nsis http ...

  5. B树叶子节点split

    一.B-Tree索引的分裂 1. 创建测试表 SQL> create table split_tab (id number, name varchar2(100)); 表已创建. SQL> ...

  6. linux vmstat使用说明

    FIELD DESCRIPTION FOR VM MODE Procs r: The number of processes waiting for run time. 表示运行队列,就是说多少个进程 ...

  7. poj3358:欧拉定理

    又是一道用欧拉定理解的题..嗯,关键还是要建好方程,注意一些化简技巧 题目大意: 给定一个由 p / q 生成的循环小数,求此循环小数在二进制表示下的最小循环节以及不是循环节的前缀 思路: 小数化为二 ...

  8. pager-taglib使用示范

    把pager-taglib.jar导入到当前项目/Test/WebRoot/WEB-INF/lib下 建立一个分页类 package web; import java.util.List; /** * ...

  9. Javascript:字符串分割split()妙用

    概述: split() 方法将字符串分割为字符串数组,并返回此数组 语法格式: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...

  10. hdu4055 dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4055 Problem Description The signature of a permutation is ...