我想弄清楚如何將我的SQLite數據庫中的表中的信息加載到AutoCompleteTextView中。我搜索了數百個帖子和網站。所有似乎有用的帖子都有不同的創建表的方法,因此使用簡單遊標適配器的語法對我來說沒有任何意義。用SQlite數據庫列填充AutoCompleteTextView
我的程序允許用戶將食物項目輸入到數據庫中。從這個程序的不同部分,我希望用戶能夠將這些食品添加到他們自己的小食品存儲中 - 我已經爲此創建了XML文件。但是,我不知道如何將FoodItems'Name'列返回到我的AutoCompleteTextView
- 我已經閱讀了有關Array Adapter的一些信息,但坦率地說,我不知道我在做什麼。
我已經創建了表並且數據庫中有數據。我只會顯示與我的問題相關的代碼,以免超載您。用於寫入數據庫的代碼是:
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數據庫獲取數據並循環遍歷記錄,並將數組適配器設置爲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);
}
「使用簡單遊標適配器的語法對我來說沒有任何意義」 - 如果您編輯問題以包含您不明白的語法,也許我們可以向您解釋它。此外,提供指向您所看到的鏈接有助於防止其他人將此標記爲可能的重複 –
您的HERE鏈接缺少超鏈接。 – halfer