Intereting Posts
Как узнать, какие файлы android.R.layout xml выглядят как / получить источник? Как отобразить мое местоположение на Google Maps для Android API v2 Доступ к родительскому объекту при обнаружении изменения только значения узла Переход общего элемента Android: просмотр героя обращается перед другим Не удалось найти команду com.android.camera.CropImage в android Выполнение авторизированных (через facebook) запросов REST на мой сервер node.js в приложении PhoneGap Отправка данных на сервер, когда устройство подключено к Интернету Отображение символов в edroidxt android Установить цвет кнопки ClearView SearchView Волейбол в предпросмотре разработчика Android M: org.apache.http не может быть разрешен Обнаружение Если нет подключения к Интернету RecyclerView – горизонтальная, двухрядная сетка, смещение второй строки Есть ли способ сохранить изображение полного размера, возвращенное из активности камеры во внутренней памяти? Whatsapp как анимация изображения профиля Навигация по локальной сети IntelliJ IDEA

Проблема с SQLite DB для Android

Я новичок в Android и слежу за учебниками по созданию приложения. У меня возникают трудности с вводом данных в базу данных. Я пробовал все, что мог, без толку. Класс базы данных:

package com.mckallip.BeerOnTheWall; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DatabaseUtil{ private static final String TAG = "DatabaseUtil"; /** * Database Name */ private static final String DATABASE_NAME = "Beer_Database"; /** * Database Version */ private static final int DATABASE_VERSION = 1; /** * Table Name */ private static final String DATABASE_TABLE = "Beer_List"; /** * Table columns */ public static final String KEY_BEER_NAME = "beer_name"; public static final String KEY_BEER_STYLE = "beer_style"; public static final String KEY_BREWERY = "beer_brewery"; public static final String KEY_ABV = "beer_abv"; public static final String KEY_BEER_SCORE = "beer_score"; public static final String KEY_BEER_IMAGE = "beer_image"; public static final String KEY_BEER_COMMENTS = "beer_comments"; public static final String KEY_ROWID = "_id"; /** * Database creation sql statement */ private static final String CREATE_BEER_TABLE = "CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_BEER_NAME + " TEXT, " + KEY_BEER_STYLE + " TEXT, " + KEY_BREWERY + " TEXT, " + KEY_ABV + " TEXT, " + KEY_BEER_SCORE + "TEXT, " + KEY_BEER_IMAGE + " TEXT, " + KEY_BEER_COMMENTS + "TEXT );"; /** * Context */ private final Context mCtx; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; /** * Inner private class. Database Helper class for creating and updating database. */ private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } /** * onCreate method is called for the 1st time when database doesn't exists. */ @Override public void onCreate(SQLiteDatabase db) { Log.i(TAG, "Creating DataBase: " + CREATE_BEER_TABLE); db.execSQL(CREATE_BEER_TABLE); } /** * onUpgrade method is called when database version changes. */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion); } } protected SQLiteDatabase getDataBase(){ return mDb; } /** * Constructor - takes the context to allow the database to be * opened/created * * @param ctx the Context within which to work */ public DatabaseUtil(Context ctx) { this.mCtx = ctx; } /** * This method is used for creating/opening connection * @return instance of DatabaseUtil * @throws SQLException */ public DatabaseUtil open() throws SQLException { mDbHelper = new DatabaseHelper(mCtx); mDb = mDbHelper.getWritableDatabase(); return this; } /** * This method is used for closing the connection. */ public void close() { mDbHelper.close(); } /** * This method is used to create/insert new record Beer record. * @param sbeer_name * @param sbeer_style * @param sbeer_score * @param sbrewery * @param sabv * @param simageLoc * @param scomments * @return long */ public long createBeer(String beer_name, String beer_style, String beer_score, String brewery, String abv, String imageLoc, String comments) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_BEER_NAME, beer_name); initialValues.put(KEY_BEER_STYLE, beer_style); initialValues.put(KEY_BREWERY, brewery); initialValues.put(KEY_ABV, abv); initialValues.put(KEY_BEER_SCORE, beer_score); initialValues.put(KEY_BEER_IMAGE, imageLoc); initialValues.put(KEY_BEER_COMMENTS, comments); return mDb.insert(DATABASE_TABLE, null, initialValues); } /** * This method will delete Beer record. * @param rowId * @return boolean */ public boolean deleteBeer(long rowId) { return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } /** * This method will return Cursor holding all the Beer records. * @return Cursor */ public Cursor fetchAllBeers() { return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_BEER_NAME, KEY_BEER_STYLE, KEY_BREWERY, KEY_ABV, KEY_BEER_SCORE, KEY_BEER_IMAGE, KEY_BEER_COMMENTS}, null, null, null, null, null); } /** * This method will return Cursor holding the specific Beer record. * @param id * @return Cursor * @throws SQLException */ public Cursor fetchBeer(long id) throws SQLException { Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_BEER_NAME, KEY_BEER_STYLE, KEY_BREWERY, KEY_ABV, KEY_BEER_SCORE, KEY_BEER_IMAGE, KEY_BEER_COMMENTS }, KEY_ROWID + "=" + id, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } /** * This method will update Beer record. * @param id * @param name * @param standard * @return boolean */ public boolean updateBeer(int id, String beer_name, String beer_style, String beer_score, String brewery, String abv, String imageLoc, String comments) { ContentValues args = new ContentValues(); args.put(KEY_BEER_NAME, beer_name); args.put(KEY_BEER_STYLE, beer_style); args.put(KEY_BREWERY, brewery); args.put(KEY_BEER_SCORE, beer_score); args.put(KEY_ABV, abv); args.put(KEY_BEER_IMAGE, imageLoc); args.put(KEY_BEER_COMMENTS, comments); return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + id, null) > 0; } } 

Класс для добавления данных:

  package com.mckallip.BeerOnTheWall; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; public class AddBeerActivity extends BeerOnTheWallActivity { private EditText et1; private EditText et2; private EditText et3; private EditText et4; private Spinner score_spin; private EditText et5; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_beer); mDatabase.open(); Context e = getApplicationContext(); String test = "read only"; if (mDatabase.getDataBase().isReadOnly()){ test = "Not ReadOnly" + mDatabase.getDataBase().getPath(); } Toast t = Toast.makeText(e, test, 2); t.show(); et1 = (EditText) findViewById(R.id.add_beer_name); et2 = (EditText)findViewById(R.id.add_beer_style); et3 = (EditText) findViewById(R.id.add_brewery); et4 = (EditText) findViewById(R.id.add_abv); score_spin = (Spinner) findViewById(R.id.score_spinner); et5 = (EditText) findViewById(R.id.add_comments); ((Button)findViewById(R.id.add_submit)).setOnClickListener(new OnClickListener() { public void onClick( View v ){ if (mDatabase.getDataBase().isReadOnly())mDatabase.open(); long beer_Id = mDatabase.createBeer( et1.toString(), et2.toString(), score_spin.toString(), et3.toString(), et4.toString(), "image", et5.toString() ); Context context = getApplicationContext(); CharSequence text = "Your beer was added at database position " + beer_Id; if ( beer_Id == -1 ){ text = "There was an error and the beer could not be added."; } Toast toast = Toast.makeText(context, text, 2); toast.show(); // reset form if ( beer_Id != -1 ){ et1.setText(null); et2.setText(null); et3.setText(null); et4.setText(null); et5.setText(null); } } }); // Handle Go to List button final Button gotoList = (Button) findViewById(R.id.beer_list); gotoList.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Go to other activity that displays beer list Intent intent = new Intent(AddBeerActivity.this, BeerListActivity.class); startActivity(intent); } }); } } 

Я добавил тосты как способ попробовать и отладить его. Первый утверждает, что он доступен только для чтения, и я не могу понять, почему и как сделать его доступным для записи.

Также я создаю экземпляр DatabaseUtil в BeerOnTheWallActivity как статическую переменную, так …

 public class BeerOnTheWallActivity extends Activity { protected DatabaseUtil mDatabase = null; //protected Cursor mCursor = null; //protected SQLiteDatabase mDB = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDatabase = new DatabaseUtil(this.getApplicationContext()); mDatabase.open(); } 

Когда я нажимаю кнопку, чтобы добавить данные, в журнале ошибок указано:

07-14 00: 31: 45.549: ОШИБКА / База данных (31512): Ошибка ввода пива_abv=android.widget.EditText@47a27ea8 beer_style=android.widget.EditText@47a25d28 beer_score=android.widget.Spinner@47a2a768 beer_name = android.widget .EditText @ 47a245a8 beer_comments=android.widget.EditText@47a2b560 beer_image = image beer_brewery=android.widget.EditText@47a26de8

07-14 00: 31: 45.549: ERROR / Database (31512): android.database.sqlite.SQLiteException: таблица Beer_List не имеет столбца с именем beer_score: при компиляции: INSERT INTO Beer_List (beer_abv, beer_style, beer_score, beer_name, beer_comments, Beer_image, beer_brewery) VALUES (?,?,?,?,?,?,?);

Я думаю, что это все. Любая помощь приветствуется.

Пожалуйста, проверьте ниже

Ваш код

 private static final String CREATE_BEER_TABLE = "CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_BEER_NAME + " TEXT, " + KEY_BEER_STYLE + " TEXT, " + KEY_BREWERY + " TEXT, " + KEY_ABV + " TEXT, " + KEY_BEER_SCORE + "TEXT, " + KEY_BEER_IMAGE + " TEXT, " + KEY_BEER_COMMENTS + "TEXT );"; 

Изменено для использования этого

 private static final String CREATE_BEER_TABLE = "CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_BEER_NAME + " TEXT, " + KEY_BEER_STYLE + " TEXT, " + KEY_BREWERY + " TEXT, " + KEY_ABV + " TEXT, " + KEY_BEER_SCORE + " TEXT, " + KEY_BEER_IMAGE + " TEXT, " + KEY_BEER_COMMENTS + " TEXT );"; 

Это не верно

  long beer_Id = mDatabase.createBeer( et1.toString(), et2.toString(), score_spin.toString(), et3.toString(), et4.toString(), "image", et5.toString() ); 

Здесь вы не получаете текст e1. Попробуйте e1.getText().toString()

Это приводит к следующим ошибкам:

07-14 00: 31: 45.549: ОШИБКА / База данных (31512): Ошибка ввода пива_abv=android.widget.EditText@47a27ea8 beer_style=android.widget.EditText@47a25d28 beer_score=android.widget.Spinner@47a2a768 beer_name = android.widget .EditText @ 47a245a8 beer_comments=android.widget.EditText@47a2b560 beer_image = image beer_brewery=android.widget.EditText@47a26de8