如何把AutoCompleteTextView连接到数据库

2025-04-07 16:08:22
推荐回答(2个)
回答1:

嘿嘿,你这就深奥了,其实Android的任何控件访问数据库的道理都是一样的啊!

有一个东西,你可以称为源,就是任何一个控件绑定数据库的数据,就是要把数据库的数据绑定到控件对应的源中,下面是网络上一段固定源的代码:

    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/autotext"
    />
public class MainActivity extends Activity {
private AutoCompleteTextView autotext;
private ArrayAdapter arrayAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);

        autotext =(AutoCompleteTextView) findViewById(R.id.autotext);
        String [] arr={"aa","aab","aac"};  // 重点就是这个 arr
        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,arr);
        autotext.setAdapter(arrayAdapter);
    }

}

上面的 String [] arr={"aa","aab","aac"}; 就是一个静态的源

如果你想访问数据库取数据到AutoCompleteTextView

道理很简单,就是取数据放入到一个“源”中,然后再用类似上面的代码把源绑定到AutoCompleteTextView上,至于数据库数据查询,额应该不用我说啥吧!通常Android都是用sqllite喽,随便找个操作数据库的代码例子:

http://www.open-open.com/lib/view/open1352201328969.html

哎,我这电脑上没有Android的开发环境,就这样给你简单讲讲吧!

弱弱的说一下,哥们外行,哥哥我做.net开发

回答2:

这个简单例子也体现MVC的思想。AutoCompleteTextView 就是View,而SimpleCursorAdapter就是Controller,SQLiteOpenHelper就相当于Model。

1、首先定义MVC中的Model,自定义DBHelper类继承SQLiteOpenHelper用于访问数据库

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "autoComplete.db";
// 根据name自动查询
public static final String NAME = "name";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sqlString = "createtable test (_id integer primary key autoincrement,name varchat(20) not null onconflict fail)";
db.execSQL(sqlString);
// 初始数据库表
String[] nameStrArrayStr = new String[] { "aaa", "abc", "cde", "中国", "美女", "提示" };
for (int i = 0; i < nameStrArrayStr.length; i++) {
db.execSQL("INSERT INTOtest(" + NAME + ")values(?)",new Object[] { nameStrArrayStr[i] });
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// do nothing here
}
/**
* 根据输入内容模糊查询
* @param name
* @return
*/
public Cursor query(String name) {
SQLiteDatabase db = this.getReadableDatabase();
return db.rawQuery("select* from test where name like '%" + name + "%' limit 10",null);
}
}
2、定义AutoCompleteAdater继承SimpleCursorAdapter控制数据交互

import android.content.Context;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter;
public class AutoCompleteAdater extends SimpleCursorAdapter {
private DBHelper dbHelper = null;
private Context context;
// 查询字段
private String queryField;
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.queryField = from;
}
/**
* 动态查询数据库
*/
@Override
public Cursor runQueryOnBackgroundThread(CharSequenceconstraint) {
if (constraint != null) {
return getDbHelper().query((String) constraint);
} else {
return null
}
}
/**
* 这里设置在弹出的提示列表中点击某一项后的返回值,返回值将被显示在文本框中
*/
@Override
public CharSequence convertToString(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(queryField));
}
public DBHelper getDbHelper() {
if (dbHelper == null) {
dbHelper = new DBHelper(this.context);
}
return dbHelper;
}
}

3、最后定义View

android:id="@+id/autoCompleteTextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:hint="@string/dbAutoComlete" >



4、在Activity中关联View和Adapter

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AutoCompleteAdatercursorAdapter = new AutoCompleteAdater(this, android.R.layout.simple_dropdown_item_1line,null, DBHelper.NAME, android.R.id.text1);
// 设置输入一个字符就弹出提示列表(默认输入两个字符时才弹出提示)
((AutoCompleteTextView) this.findViewById(R.id.autoCompleteTextView1)).setThreshold(1);
((AutoCompleteTextView) this.findViewById(R.id.autoCompleteTextView1)).setAdapter(cursorAdapter);
}