我试图弄清楚如何将SQLite数据库中的表格中的信息加载到AutoCompleteTextView中。我搜索了数百个帖子和网站。所有看似有用的帖子都有不同的方法来创建我使用过的表格,因此使用简单游标适配器的语法对我没有任何意义。
我的程序允许用户将食物项目输入数据库。从该程序的不同部分,我希望用户能够将这些食品添加到他们自己的小食品存储中 - 我已经为此创建了XML文件。但是,我不知道如何退回FoodItems' Name'我的AutoCompleteTextView
栏目 - 我已经阅读了有关阵列适配器的内容,但坦率地说,我不知道我在做什么。
我已经创建了表,数据库中有数据。我只会显示与我的问题相关的代码,以免使你超负荷。用于编写数据库的代码是:
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "ChangeMe.db";
public static final String TABLE_CREATE_FOODS = "CREATE TABLE IF NOT EXISTS FoodItems (Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Name TEXT, Category TEXT, Calorie NUMERIC, Fat NUMERIC, Carbohydrate NUMERIC)";
然后,我有一种设置这些食物的方法:
public long SetFoodItems(String name, String category, Float calorie, Float fat, Float carbohydrate) {
String query = "SELECT * FROM FoodItems";
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("Name", name);
values.put("Category", category);
values.put("Calorie", calorie);
values.put("Fat", fat);
values.put("Carbohydrate", carbohydrate);
long id = db.insert("FoodItems", null, values);
return id;
}
我还制作了一个游标来获取FoodItems表中的所有记录:
public Cursor ObtainFoodItems()
{
SQLiteDatabase db = this.getReadableDatabase();
String Query = "SELECT Name FROM FoodItems";
Cursor CR = db.rawQuery(Query, null);
return CR;
}
那么,谁能告诉我如何将这个光标返回到autoCompleteTextView?请记住,我是Java的完整新手(以及一般的编码),因此非常感谢简化的建议。
编辑:我能找到的最好的例子是HERE,但他要求MyObject填充他的autoTextView并手动加载数据,我不需要这样做,因为我的用户将对所有人负责数据输入。我从该链接中无法理解的代码部分是:
// this function is used in CustomAutoCompleteTextChangedListener.java
public String[] getItemsFromDb(String searchTerm){
// add items on the array dynamically
List<MyObject> products = databaseH.read(searchTerm);
int rowCount = products.size();
String[] item = new String[rowCount];
int x = 0;
for (MyObject record : products) {
item[x] = record.objectName;
x++;
}
return item;
}
这主要是因为他创建表的功能与我的完全不同:
// creating table
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "";
sql += "CREATE TABLE " + tableName;
sql += " ( ";
sql += fieldObjectId + " INTEGER PRIMARY KEY AUTOINCREMENT, ";
sql += fieldObjectName + " TEXT ";
sql += " ) ";
db.execSQL(sql);
}
所以这是我实现AutoCompleteTextView的代码,调用方法从SQLite数据库中获取数据并循环遍历记录,并将Array Adapter设置为AutoCompleteTextView(我认为)。不过有些事情是错的,我觉得我错过了什么,因为它没有做任何事情。
public class AddToPantry extends AppCompatActivity {
AutoCompleteTextView foodItemsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_to_pantry);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Spinner dropdown = (Spinner) findViewById(R.id.editCategory);
String[] items = new String[]{"Dairy", "Grain", "Vegetable", "Fruit", "Meat" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, items);
dropdown.setAdapter(adapter);
Spinner dropdownLoc = (Spinner) findViewById(R.id.editLocation);
String[] itemsLoc = new String[]{"Cupboard", "Fridge", "Freezer" };
ArrayAdapter<String> adapterLoc = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, itemsLoc);
dropdownLoc.setAdapter(adapterLoc);
Button saveButton = (Button) findViewById(R.id.saveIngredient);
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AddItemToPantry();
}
});
//Creates the array
ArrayList<String> array = new ArrayList<>();
//Implements AutoCompleteTextView
foodItemsList = (AutoCompleteTextView) findViewById(R.id.autoFoodName);
//Calls method from DH to get all food items
DatabaseHandler dbh = new DatabaseHandler(this);
Cursor cr = dbh.ObtainFoodItems();
cr.moveToFirst();
while (cr.moveToNext()) {
cr.getString(cr.getColumnIndex("Name"));
}
ArrayAdapter<String> foodItemAdapter = new ArrayAdapter<String>(this,
android.R.layout.select_dialog_item, array);
foodItemsList.setAdapter(foodItemAdapter);
}
答案 0 :(得分:0)
首先创建array
ArrayList<String> array = new ArrayLIst<>();
在方法内部,您已阅读光标,循环浏览并将这些项目添加到array
while (CR.moveToNext()) {
CR.getString(CR.getColumnIndex('NAME'));
}
最后将适配器设置为AutoCompleteTextView,如下所示,
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.select_dialog_item, array);
autocompletetextview.setAdapter(adapter);
答案 1 :(得分:0)
考虑到您使用的是AutoCompleteTextView类,最简单的实现方式是:
那就是它。