读取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. Regini命令的使用和参数讲解

    Regini程序操作系统自带的,从XP开始就有,主要是用于修改注册表及注册表权限.我们就从这两方面介绍regini的用法.Regini必须要指定操作脚本,也就是,提前将你要操作的内容写在一个文本文件中 ...

  2. 矩阵快速幂--51nod-1242斐波那契数列的第N项

    斐波那契额数列的第N项 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, ...

  3. 2.5 Go 算术运算与变量使用技巧

    变量作用域 简单来说,GO的变量以块为范围:一个if-else的块,就可以包含一个变量的生命周期.变量的声明,要在使用之前. package main import ( "fmt" ...

  4. c# 水晶报表使用说明

    水晶报表介绍 水晶报表是 vs 早期版本自带的一款报表控件.vs2017不自带水晶报表,需要自行安装.虽然水晶报表是收费控件,但是微软已经付过钱了,所以vs自带的水晶报表可以直接使用. 如果项目是 . ...

  5. Java使用占位符拼接字符串-String.format()的使用

    String domain = "www.ykmaiz.com"; int iVisit = 0; String info = String.format("该域名%s被 ...

  6. 记一次简单的关于SimpleDateFormat的优化

    # 有一个有趣的需求: (1)预先定义每天24小时不同时间段的电价 (2) 有一个list<map<timestamp,value>>: timestamp(时间戳):valu ...

  7. docker安装mongo初体验

    1.docker安装在此不做介绍,请自行百度:个人环境是在windows下运行cmd执行docker命令2.打算在docker下安装使用mongo,顺带熟悉docker,拉开篇章3.docker下安装 ...

  8. (转)Shell常用的特殊位置参数变量说明

    Shell常用的特殊位置参数变量说明 原文:http://m.blog.itpub.net/15498/viewspace-2151142/ $0    获取当前执行的shell脚本的文件名,如果执行 ...

  9. (转)mysql 5.6 原生Online DDL解析

    做MySQL的都知道,数据库操作里面,DDL操作(比如CREATE,DROP,ALTER等)代价是非常高的,特别是在单表上千万的情况下,加个索引或改个列类型,就有可能堵塞整个表的读写. 然后 mysq ...

  10. 用泛型T替代object做为万能参数传递

    using System;using System.Collections;using System.Collections.Generic;using UnityEngine; public cla ...