2016-04-03 13 views
0

Ich versuche herauszufinden, wie Informationen aus einer Tabelle in meiner SQLite-Datenbank in eine AutoCompleteTextView geladen werden. Ich habe Hunderte von Posts und Websites durchsucht. Alle Posts, die hilfreich zu sein schienen, haben unterschiedliche Methoden zum Erstellen von Tabellen zu der, die ich verwendet habe, und daher macht die Syntax für die Verwendung des einfachen Cursor-Adapters für mich keinen Sinn.füllen AutoCompleteTextView mit SQlite-Datenbankspalte

Mein Programm ermöglicht es einem Benutzer, Lebensmittel in eine Datenbank einzugeben. Von einem anderen Abschnitt dieses Programms möchte ich, dass die Benutzer in der Lage sind, diese Nahrungsmittel in ihren eigenen kleinen Nahrungsmittelspeicher hinzuzufügen - ich habe bereits die XML-Datei dafür erstellt. Wie auch immer, ich habe keine Ahnung, wie ich die Spalte "FoodItems 'Name" in meine AutoCompleteTextView zurückverwandeln kann - ich habe etwas über einen Array-Adapter gelesen, aber ehrlich gesagt habe ich keine Ahnung, was ich mache.

Ich habe bereits die Tabelle erstellt und es gibt Daten in der Datenbank. Ich zeige nur den für mein Problem relevanten Code, um Sie nicht zu überlasten. Der verwendete Code für die Datenbank zu schreiben ist:

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)"; 

Dann habe ich eine Methode, um diese Lebensmittel zu setzen:

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; 
} 

Ich habe auch einen Cursor gemacht alle Datensätze aus dem erhalten FoodItems Tabelle:

public Cursor ObtainFoodItems() 
{ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    String Query = "SELECT Name FROM FoodItems"; 
    Cursor CR = db.rawQuery(Query, null); 

    return CR; 
} 

Also, kann mir jemand sagen, wie ich diese Cursor in eine autoCompleteTextView zurückkehren? Bitte denken Sie daran, dass ich ein absoluter Neuling für Java bin (und für die Programmierung im Allgemeinen), sodass vereinfachte Vorschläge sehr geschätzt werden.

BEARBEITEN: Das beste Beispiel, das ich finden konnte, war HERE, jedoch ruft er MyObject auf, um seine autoTextView aufzufüllen, und lädt Daten manuell, was ich nicht tun muss, da mein Benutzer für die gesamte Dateneingabe verantwortlich ist.

Der Abschnitt des Codes, die ich von dieser Verbindung nicht verstehen ist:

// 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; 
} 

Dies ist vor allem, weil seine Funktion, um die Tabelle zu erstellen, ganz anders als meine ist:

// 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); 

} 

Also das ist mein Code, wo ich eine AutoCompleteTextView implementieren, rufen Sie die Methode zum Abrufen der Daten aus der SQLite-Datenbank und durchlaufen die Datensätze, und setzen Sie den Array-Adapter auf die AutoCompleteTextView (ich denke). Aber etwas stimmt nicht, ich habe das Gefühl, etwas verpasst zu haben, weil es nichts tut.

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

"die Syntax für die Verwendung der einfachen Cursor-Adapter macht keinen Sinn für mich" - wenn Sie Ihre Frage bearbeiten, um welche Syntax Sie nicht verstehen, könnten wir es Ihnen vielleicht erklären. Das Bereitstellen von Links zu dem, was Sie angeschaut haben, trägt dazu bei, zu verhindern, dass andere dies als mögliches Duplikat markieren –

+0

Ihr HERE-Link enthält keinen Hyperlink. – halfer

Antwort

0

Zuerst erstellen array

ArrayList<String> array = new ArrayLIst<>(); 

Innerhalb der Methode, die Sie den Cursor gelesen haben, durchlaufen sie und diejenigen Artikel zu array

while (CR.moveToNext()) { 
     CR.getString(CR.getColumnIndex('NAME')); 
    } 

schließlich den Adapter an AutoCompleteTextView Satz in so,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     android.R.layout.select_dialog_item, array); 
autocompletetextview.setAdapter(adapter); 
+0

Ich konnte das nicht zur Arbeit bringen; Ich habe unten meinen Versuch, Ihre Vorschläge einzufügen, kommentiert, da ich den gesamten Code nicht als Antwort auf Ihre Antwort einfügen konnte. Können Sie mir bitte sagen, dass ich etwas vermisse? – alexpagee

+0

Haben Sie Ihre Variable 'CR' protokolliert und bestätigt, ob die Daten korrekt sind? –

0

man bedenkt, dass Sie die AutoCompleteTextView Klasse verwenden, wäre die einfachste Implementierung sein:

  1. Implementieren eines AutoCompleteTextView
  2. Abrufen von Daten aus dem db und Schleife alle in einem Array die Werte setzen
  3. erstellen ein ArrayAdapter und hängen Sie es an Ihre AutoCompleteTextView an.

Das ist es.

Verwandte Themen