读取SQLite中的数据显示在AutoCompleteTextView中,支持动态加入SQLite中不存在的数据.

package zhang.ya;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream; import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.TextView; public class Test00 extends Activity implements TextWatcher, OnClickListener
{
private final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/course_name";
private AutoCompleteTextView courseName;
private final String DATABASE_FILENAME = "course_name.db3";
private SQLiteDatabase database;
private Button btnSelectWord; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); setContentView(R.layout.main);
database = openDatabase();
courseName = (AutoCompleteTextView) findViewById(R.id.courseName);
courseName.setThreshold();
courseName.addTextChangedListener(this);
btnSelectWord = (Button) findViewById(R.id.buttonName);
btnSelectWord.setOnClickListener(this);
} public class CourseNameAdapter extends CursorAdapter
{
private LayoutInflater layoutInflater; @Override
public CharSequence convertToString(Cursor cursor)
{
return cursor == null ? "" : cursor.getString(cursor.getColumnIndex("course_name"));
} private void setView(View view, Cursor cursor)
{
TextView tvWordItem = (TextView) view;
tvWordItem.setText(cursor.getString(cursor.getColumnIndex("course_name")));
} @Override
public void bindView(View view, Context context, Cursor cursor)
{
setView(view, cursor);
} @Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
View view = layoutInflater.inflate(R.layout.word_list_item, null);
setView(view, cursor);
return view;
} public CourseNameAdapter(Context context, Cursor c, boolean autoRequery)
{
super(context, c, autoRequery);
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
} //输入为空则使得确定按钮失效,只有输入了数据才使得按钮处于活动状态
@Override
public void afterTextChanged(Editable s)
{
Log.i("zhangya", "textchage");
String contentStr = s.toString(); if (contentStr == null || contentStr.length() <= )//判断contentStr是否为空,判断字符串是否为空典型写法
{
Log.i("zhangya", "afterTextChanged null");
btnSelectWord.setEnabled(false);//为空则不是能按钮 } else
{
Log.i("zhangya", "afterTextChanged not null");
btnSelectWord.setEnabled(true);
Cursor cursor = database.rawQuery("select * from course_name where course_name like ?", new String[]
{ contentStr + "%" }); CourseNameAdapter dictionaryAdapter = new CourseNameAdapter(this, cursor, true);
courseName.setAdapter(dictionaryAdapter);
}
} @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// TODO Auto-generated method stub } @Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{ } private SQLiteDatabase openDatabase()
{
try
{
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!dir.exists())
dir.mkdir();
if (!(new File(databaseFilename)).exists())
{
InputStream is = getResources().openRawResource(R.raw.course_name);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[];
int count = ;
while ((count = is.read(buffer)) > )
{
fos.write(buffer, , count);
} fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
} catch (Exception e)
{
}
return null;
} @Override
public void onClick(View v)
{
String sql = "select * from course_name where course_name=?";
Cursor cursor = database.rawQuery(sql, new String[]
{ courseName.getText().toString() });
if (cursor.getCount() == )//没有同名记录,则插入数据
{
sql = "insert into course_name(course_name)values(?)";
database.execSQL(sql, new Object[]
{ courseName.getText().toString() });
} else
{
Log.i("zhangya", "else");
}
cursor.moveToFirst(); } }

效果图:

Android SQLite与AutoCompleteTextView的更多相关文章

  1. Android SQLite 通配符查询找不到参数问题

    使用Android SQLite中SQLiteDatabase类的query方法查询时,如果where中包含通配符,则参数会无法设置,如类似下面的方法查询时 SQLiteDatabase db = d ...

  2. Android+Sqlite 实现古诗阅读应用(三)

    往期传送门: Android+Sqlite 实现古诗阅读应用(一) Android+Sqlite 实现古诗阅读应用(二) 加入截图分享的功能. 很多应用都有分享的功能,我也想在我的古诗App里加入这个 ...

  3. Android+Sqlite 实现古诗阅读应用(二)

    传送门:Android+Sqlite 实现古诗阅读应用(一) Hi,又回来了,最近接到很多热情洋溢的小伙伴们的来信,吼开心哈,我会继续努力的=-=! 上回的东西我们做到了有个textview能随机选择 ...

  4. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  5. Android SQLite总结(一) (转)

    Android SQLite总结(一)  郑海波 2012-08-21 转载请声明:http://blog.csdn.net/nuptboyzhb/article/details/7891887 前言 ...

  6. android SQLite使用SQLiteOpenHelper类对数据库进行操作

    android SQLite使用SQLiteOpenHelper类对数据库进行操作 原文: http://byandby.iteye.com/blog/835580

  7. Android sqlite管理数据库基本用法

    Android操作系统中内置了sqlite数据库(有关sqlite数据库详细介绍见:http://zh.wikipedia.org/wiki/SQLite),而sqllite本身是一个很小型的数据库, ...

  8. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  9. Android Sqlite 导入CSV文件 .

    http://blog.csdn.net/johnnycode/article/details/7413111 今天遇到 Oracle 导出的12万条CSV格式数据导入 Android Sqlite ...

随机推荐

  1. 《The One 团队》第二次作业:团队项目选题

    项目 内容 作业所属课程 http://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/10726884.h ...

  2. sql 性能优化相关--总结别人的总结,未做验证,先归纳

    sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索引,索引不合理 没有 ...

  3. mysql 02

    CREATE TABLE emp(eid INT,ename VARCHAR(20),egender CHAR(2),ebirthday DATE,eemail CHAR(10),eramark VA ...

  4. 3dsmax2018卸载/安装失败/如何彻底卸载清除干净3dsmax2018注册表和文件的方法

    3dsmax2018提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2018失败提示3dsmax2018安装未完成,某些产品无法安装,也有时候想重新 ...

  5. C++中函数调用时的三种参数传递方式

    在C++中,参数传递的方式是“实虚结合”. 按值传递(pass by value) 地址传递(pass by pointer) 引用传递(pass by reference) 按值传递的过程为:首先计 ...

  6. MySQL数据表的修改

    数据表的修改包括列的增加.列的删除.约束的添加.约束的删除等. 添加单列 ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [F ...

  7. Netbeans8的中文乱码

    Netbeans8的中文乱码 前提: 不是编码的问题,统一改成UTF-8,之后文字还是显示方块.使用以下方式解决: 菜单 -> 工具 -> 选项 -> 字体和颜色 -> 语法 ...

  8. ActiveMQ_Linux安装

    首先ActiveMQ查看你需要的版本 官网:http://activemq.apache.org/ 我这里选择的是:apache-activemq-5.14.0-bin.tar.gz 然后在linux ...

  9. restful api理解

    REST -- REpresentational State Transfer 直接翻译:表现层状态转移. 首先要明确一点:REST 实际上只是一种设计风格,它并不是标准. 0. REST不是&quo ...

  10. Hibernate各种查询操作(二)

    一.QBC的查询方式 使用QBC不在需要写hql语句,而是使用criteria对象的各种方法来实现. 1.查询所有 //使用QBC方式查询所有 @Test public void test11(){ ...