把用户输入的内容保存到数据库表中,然后用户输入时,进行模糊查询并把查询结果附到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. PowerShell 简单模式识别 1

    PowerShell 简单模式识别 1 10 6月, 2013  在 Powershell tagged 字符串 / 文本 / 通配符 by Mooser Lee 在验证用户的条目时,模式识别是必要并 ...

  2. 从vector容器中查找一个子串:search()算法

    如果要从vector容器中查找是否存在一个子串序列,就像从一个字符串中查找子串那样,次数find()与find_if()算法就不起作用了,需要采用search()算法:例子: #include &qu ...

  3. 通过代理访问nginx和直接访问nginx区别

    80.82.78.38 [23/Sep/2016:05:36:18 +0800] "GET http://www.baidu.com/cache/global/img/gs.gif HTTP ...

  4. BZOJ2393: Cirno的完美算数教室

    2393: Cirno的完美算数教室 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 83[Submit][Status] D ...

  5. Linux企业级项目实践之网络爬虫(22)——编写爬虫系统服务控制脚本

    需求:1.可通过 service spider start|stop|status|restart 命令对服务进行控制2.spider服务可开机自启动 start() { echo "sta ...

  6. SPOJ375.QTREE树链剖分

    题意:一个树,a b c 代表a--b边的权值为c.CHANGE x y  把输入的第x条边的权值改为y,QUERY x y 查询x--y路径上边的权值的最大值. 第一次写树链剖分,其实树链剖分只能说 ...

  7. Java 8 新特性终极版

    声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...

  8. PHP常见报错解析

    {错误类型}: {错误原因} in {错误文件} on {错误行数} 说明了在哪个文件的哪一行中因何种原因出现了何种错误. 常见的错误类型一般有下面几种: Parse error(解析错误)一般都伴随 ...

  9. jQuery鼠标悬停图片放大显示

    jQuery鼠标悬浮放于图片上之后图片放大显示的效果,即鼠标移到图片上图片突出显示,鼠标移开后恢复原来的模样,你可以在图片滚动效果中加上本特效,相信会更炫一些. <!DOCTYPE html P ...

  10. web项目跨域访问

    1.同域相互访问 假设A.html 与 b.html domain都是localhost (同域) A.html中iframe 嵌入 B.html,name=myframe A.html有js fun ...