Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I created a SQLiteHelper class. Im my case, I have an sqlite database that I copy from assets folder to the /data/data directory if not there:</p> <pre><code>private DatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, DB_NAME, null, 1); this.mContext = context; } // getInstance() singleton public static synchronized DatabaseHelper getInstance(Context context) { if (_instance == null) { _instance = new DatabaseHelper(context,null,null,1); } return _instance; } @Override public void onCreate(SQLiteDatabase db) { // Leave it blank, we don't want to create. } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Leave it blank, we don't want to upgrade } public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ openDataBase(); // check the version number; SQLiteCursor cursor = runQuery("select versionNumber from version where VersionType = \"CURRENT\""); if (cursor!=null){ cursor.moveToFirst(); int version = cursor.getInt(cursor.getColumnIndex("versionNumber")); if (version!=SQL_VERSION){ //TODO - grab the favorites and ingredients first. ArrayList&lt;String&gt; favorites = getFavorites(); // I think I need to close the db before erasing it, then open new one. close(); mContext.deleteDatabase(DB_NAME); this.getReadableDatabase(); copyDataBase(); openDataBase(); for (int i = 0; i&lt;favorites.size();i++){ insert(Constants.TABLE_FAVORITES,Constants.FAVORITE,favorites.get(i)); } close(); } } }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); copyDataBase(); } } private void copyDataBase(){ //Open your local db as the input stream InputStream myInput; try { myInput = mContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = LOCATION + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))&gt;0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void openDataBase() throws SQLException{ //Open the database String myPath = LOCATION + DB_NAME; mDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); } @Override public synchronized void close() { if(mDatabase != null) mDatabase.close(); super.close(); } public SQLiteCursor runQuery(String query){ return (SQLiteCursor) mDatabase.rawQuery(query,null); } private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = LOCATION + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } // all insert does is insert to favorites and into your bar. public void insert(String table, String column, String value) { ContentValues values = new ContentValues(); values.put(column, value); mDatabase.insert(table, null, values); } public void delete(String table, String column, String value){ mDatabase.delete(table,column+" = \""+value+"\"",null); } </code></pre> <p>To fill the auto Autocomplete TextView on my activity:</p> <pre><code>startManagingCursor(mCursor); // get instance of database helper class mDatabaseHelper = DatabaseHelper.getInstance(this); // create database for first time try { mDatabaseHelper.createDataBase(); } catch (IOException e) { //Log.i(TAG,"Could not create the database"); e.printStackTrace(); } // open the database mDatabaseHelper.openDataBase(); mDrinks = this.populate(); </code></pre> <p>Populate method:</p> <pre><code>//populates by drinks private ArrayList&lt;String&gt; populate() { ArrayList&lt;String&gt; items = new ArrayList&lt;String&gt;(); mCursor = mDatabaseHelper.runQuery( "select "+ Constants.TITLE +" from " +Constants.TABLE_DRINK+" order by " +Constants.TITLE); if (mCursor != null){ mCursor.moveToFirst(); while (!mCursor.isAfterLast()){ items.add(mCursor.getString(mCursor.getColumnIndex(Constants.TITLE))); mCursor.moveToNext(); } } return items; } </code></pre> <p>Then I set it:</p> <pre><code>// when text changes, autocomplete happens mSearchTextView = (AutoCompleteTextView) findViewById(R.id.search_drink); mSearchTextView.setAdapter( new ArrayAdapter&lt;String&gt;( this, R.layout.list_item, mDrinks)); mSearchTextView.setClickable(true); // clear the text when the searchTextView is clicked. Necessary for // clearing after pressing enter in an invalid drink. mSearchTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mSearchTextView.setText(""); } }); mSearchTextView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long arg3) { // TODO - here we need to get the name, then search for ingredients and show everything in // an alert dialog. Here is main logic. buildDialog(parent.getItemAtPosition(position).toString()); } }); mSearchTextView.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (event != null&amp;&amp; (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); in.hideSoftInputFromWindow(mSearchTextView .getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); Toast.makeText(v.getContext(), "Please Select a Drink from the Auto Complete or the List Shown", Toast.LENGTH_LONG).show(); } return false; } }); </code></pre> <p>Hope you understand. I can't give you my full source because this is in a marketplace app I developed. You can check it out before trying to do all the work: <a href="https://play.google.com/store/apps/details?id=com.life.plus.studios.bartender.drink.recipes.light" rel="nofollow">https://play.google.com/store/apps/details?id=com.life.plus.studios.bartender.drink.recipes.light</a></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload