读取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. java.math.BigDecimal cannot be cast to java.lang.Integer

    问题来源: 在数据库中查询一个列表的长度时,需要转换为Integer类型,我刚开始直接转就报错了.因为在数据库中用count(*) 聚合函数返回的值类型为BigDecimal,不能直接转换为Integ ...

  2. TP5.1 查看具体版本

    https://blog.csdn.net/haibo0668/article/details/80865785 echo \think\facade\App::version(); composer ...

  3. Mac退出vim

    按下ESC后输入:才能进入命令模式! 进入之后输入:   qw (保存退出)       然后按2次大写Z退出 q! (不保存退出)     输入后回车退出  

  4. Which mb sdconnect c4 worth the money?

    MB SD connect C4 with laptop v2018.5 Version avaiable now ,It is ready to work after you get it ,wor ...

  5. css :before 内容左边 分割线(四)

    商品 左边分割线,使用css伪类实现,before or  after <style> *{ margin:; padding:; } .clearfix { *zoom:; } .cle ...

  6. Unity QualitySettings.shadows 阴影

    QualitySettings.shadows 阴影 public static ShadowQuality shadows; Description 描述: 要使用的实时阴影类型. 这就决定了应该使 ...

  7. SQL Server触发器创建、删除、修改、查看

    一:触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二:SQL Server为每个触发器都创 ...

  8. (转)Http状态码301和302概念简单区别及企业应用案例

    Http状态码301和302的区别及企业应用案例 原文:http://blog.51cto.com/oldboy/1774260 1.什么是301重定向? 301重定向/跳转一般,表示本网页永久性转移 ...

  9. Unity游戏接入Steam成就

    在接入Steam成就,其实有些地方是有坑点的,而且steam官网给的是c++代码的接入教程.如果是老鸟的话,接入还并不是很难. 但是对于新手其实还是比较痛苦的,网上这方面的资料很少.这里我给总结下,u ...

  10. oracle insert两个关联表

    现有一张老师学生表(tb_tea_cou),由于业务需要,需把老师学生表tb_tea_stu拆分成两张表(tb_tea.tb_cou),并把记录insert到这两张子表中(tb_tea.tb_cou为 ...