0

に最後に追加されたアイテムを読み取ろうとしていますSQLiteDatabaseが、メソッドCursorIndexOutOfBoundsExceptionを使用しようとすると が表示されます。moveToLast()文字列は .xml でデータベースに追加されFragmentます。文字列が追加されると、追加された最後のアイテムで Toast を作成するクラス ( Activity/ではない) を分離します。Fragment

コードは次のとおりです。

フラグメント内:

HistoryDataBaseSQL mDbHelper = new HistoryDataBaseSQL(getActivity()); // This gets access to my SQL
            SQLiteDatabase db = mDbHelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(ConstructData.COLUMN_NAME_ENTRY_ID, counter);
            values.put(ConstructData.COLUMN_NAME_TITLE, content_title); // content_title is a variable

これは私のヘルパー クラスの一部です。

public static abstract class ConstructData implements BaseColumns {

        public static final String TABLE_NAME = "history";
        public static final String COLUMN_NAME_ENTRY_ID = "entryid";
        public static final String COLUMN_NAME_TITLE = "title";

これは私のデータベースクラスです:

public class HistoryDataBaseSQL extends SQLiteOpenHelper {
        // If you change the database schema, you must increment the database version.
        public static final int DATABASE_VERSION = 1;
        public static final String DATABASE_NAME = "history.db";

        private static final String TEXT_TYPE = " TEXT";
        private static final String COMMA_SEP = ",";
        private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE " + ConstructData.TABLE_NAME + " (" +
                    ConstructData._ID + " INTEGER PRIMARY KEY," +
                    ConstructData.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
            ConstructData.COLUMN_NAME_TITLE + TEXT_TYPE +
             // Any other options for the CREATE command, rem to add comma_sep to split
            " )";

        public HistoryDataBaseSQL(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SQL_CREATE_ENTRIES);
        }
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                onCreate(db);
        }
        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            onUpgrade(db, oldVersion, newVersion);
        }

    }

これは、次のものを作成しようとするクラスですToast

HistoryDataBaseSQL mDbHelper = new HistoryDataBaseSQL(getContext); // This gets access to my SQL
    SQLiteDatabase db = mDbHelper.getReadableDatabase();

    String[] projection = {
            ConstructData._ID,
            ConstructData.COLUMN_NAME_TITLE            
            };

    Cursor c = db.query(
            ConstructData.TABLE_NAME,  
            projection,                            
         null,                                  
        null,                        
        null,                                     
         null,                                   
         null                              
            );
    c.moveToLast(); 
     String string = null;

                string = c.getString(c.getColumnIndexOrThrow(ConstructData.COLUMN_NAME_TITLE)); // If I comment this out, there is not exception

    Toast.makeText(getContext, "Title is: " + string, Toast.LENGTH_SHORT).show();


    c.close();
4

1 に答える 1

0

クエリが結果を返さないため、例外をトリガーします。

データベースを頻繁に読み取ることはお勧めしません。データベースは、データの永続化に使用されます。

DataModel は引き続き使用できます。アイテムを追加したら、それをDataModelデータベースに追加してデータを保存します。

DataModel次回アプリを笑ったときに保存したデータを取り込めます。

于 2013-07-29T02:36:49.270 に答える