2016-04-03 7 views
0

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テーブル:私はautoCompleteTextViewにこのカーソルを返す方法

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

    return CR; 
} 

だから、誰も私を伝えることができますか?私はJava(そして一般的なコーディング)の完全な初心者ですので、簡略化された提案が高く評価されることを覚えておいてください。

編集:私が見つけた最良の例はHEREでしたが、彼は自分の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 dbからデータをフェッチしてレコードをループするメソッドを呼び出し、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

あなたのHEREリンクにはハイパーリンクがありません。 – halfer

答えて

0

まず最後にAutoCompleteTextViewにアダプタを設定して、カーソルを読んだメソッド内array

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

を作成し、それをループしarray

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

にそれらの項目を追加このように、

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

私はこれを動作させることができませんでした。私はあなたの答えへの応答としてコード全体を適合させることができなかったので、あなたの提案を挿入する私の試みの下でコメントしました。私が何か不足しているかどうか教えてください。 – alexpagee

+0

変数 'CR'をログに記録し、適切なデータがあることを確認しましたか? –

0

あなたがAutoCompleteTextViewクラスを使用していることを考慮すると、最も簡単な実装がに次のようになります。AutoCompleteTextViewを実装

  1. 作成し、アレイ内のすべての値を入れて、あなたのDBとループからデータを取得ArrayAdapterを作成し、AutoCompleteTextViewにアタッチします。

これだけです。

関連する問題