1

I'm following the http://www.vogella.de/articles/AndroidSQLite/article.html tutorial. I am now trying to change the system so there is not just field 'comment' but rather field 'item' and 'price'.

Now that I have 2 Coloums rather then one the cursor seems to be causing the app to crash! For example here is the code below:

        public List<Item> getAllItems() {
            List<Item> items = new ArrayList<Item>();
            Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                    allColumns, null, null, null, null, null);
            cursor.moveToFirst();

            while (!cursor.isAfterLast()) {
                Item item = cursorToItem(cursor);
                items.add(item);
                cursor.moveToNext();
            }
            // Make sure to close the cursor
            cursor.close();
            return items;
        }

        private Item cursorToItem(Cursor cursor) {
            Item item = new Item();
            item.setId(cursor.getLong(0));
            item.setItem(cursor.getString(1));
            item.setPrice(cursor.getString(2));
            return item;
        }

LINE :

 Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                    allColumns, null, null, null, null, null);

Is what is causing the error, I believe it has something to do with the fact that I have an additional column. can someone please tell me how to edit this line to get it to work, I have tried but don't understand this cursor query.

EDIT: By replacing allcolumns with null it ran. But now its crashing on:

public Item createItem(String item, String price) {
        ContentValues values = new ContentValues();
        values.put(MySQLiteHelper.COLUMN_ITEM, item);
        values.put(MySQLiteHelper.COLUMN_PRICE, price);
        long insertId = database.insert(MySQLiteHelper.TABLE_ITEMS, null,
                values);
        // To show how to query
        Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                null, null, null);
        cursor.moveToFirst();
        return cursorToItem(cursor);
    }

on line:

Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                null, null, null);

Here is the MySQLHelper.js:

package nupos.nupay.app;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteHelper extends SQLiteOpenHelper {

public static final String TABLE_ITEMS = "items";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_ITEM = "item";
public static final String COLUMN_PRICE = "price";

private static final String DATABASE_NAME = "items_test.db";
private static final int DATABASE_VERSION = 1;

// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
        + TABLE_ITEMS + "( " + COLUMN_ID
        + " integer primary key autoincrement, " + COLUMN_ITEM
        + " text not null," + COLUMN_PRICE
        +"  text not null);";

public MySQLiteHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(MySQLiteHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS);


    onCreate(db);
}

 }

Edit: The issue was the database was created initially without one of the fields.

6
  • please add the logcat error stacktrace Commented Mar 12, 2012 at 10:59
  • You have forgotten to put here declarations of the "database" and "MySQLiteHelper.TABLE_ITEM" Commented Mar 12, 2012 at 11:01
  • Make sure that you removed the App with 1 column before running the code with 2 as the database is only updated not replace. You can take the DB file from the emulator and use sqlite.exe to make sure it is created correctly with all columns Commented Mar 12, 2012 at 11:02
  • you may have the wrong columns in allColumns. Commented Mar 12, 2012 at 11:02
  • 1
    try replacing allColumns with null in your query Commented Mar 12, 2012 at 11:04

1 Answer 1

1

IMHO, allColumns doesn't sit with the MySQLiteHelper.TABLE_ITEMS definition. Put here declarations and current values of all participying objects.

One more possibility - database object is not initialized properly and is null at the moment. You should check for such situations.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.