java - 将整数存储在 SQL 数据库中并在 fragment 中检索它

标签 java android android-fragments sqliteopenhelper

我正在设置一个 Android 应用程序,并且刚刚浏览了 Android 开发人员文档来设置 SQL 数据库 http://developer.android.com/training/basics/data-storage/databases.html#WriteDbRow

我有一个设置了抽屉导航的MainActivity:http://pastebin.com/9nyejZdV ,以及该 Activity 中的一个开关,用于在单击抽屉导航中的项目时替换 fragment 。

交换的两个 fragment 是:

StartingFragment, which is displayed when the app is first opened: http://pastebin.com/740LepNV

<小时/>

TeaCounterFragment, which is displayed when the second item in my navdrawer is clicked: http://pastebin.com/edfEe1Gd

<小时/>

在 StartingFragment 的 onClick 方法中,每当按下名为“Oolong”的按钮时,它都会更新 TeaCounterFragment 中的 TextView,显示按下“Oolong”按钮的次数(通过使用 String.valueOf(an_integer )和一个 bundle )。

问题是,每当应用程序完全关闭时,TextView 就会重置为默认值,不会显示计数。所以,我想我会使用 SQL 数据库来存储整数,这样当应用程序完全关闭时,整数仍然会被存储。然后,当应用程序重新打开时,我可以单击 NavDrawer 并转到我的 TeaCounterFragment,并且该数字仍会在那里。

我怎样才能实现这个目标?

数据库 Activity :

public final class Database {

    // To prevent someone from accidentally instantiating the database class,
    // give it an empty constructor.
    public Database() {
    }

    /* Inner class that defines the table contents */
    public static abstract class DBEntry implements BaseColumns {

        public static final String TABLE_NAME = "Number of Cups of Tea";
        public static final String COLUMN_NAME_ENTRY_ID = "entryid";
        public static final String COLUMN_NAME_TITLE = "Tea Counter Table";
        public static final String COLUMN_NAME_SUBTITLE_OOLONG = "Oolong";
    }

    private static final String TEXT_TYPE = " TEXT";
    private static final String COMMA_SEP = ",";
    private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE " + DBEntry.TABLE_NAME + " (" +
                    DBEntry._ID + " INTEGER PRIMARY KEY," +
                    DBEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
                    DBEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
                    DBEntry.COLUMN_NAME_SUBTITLE_OOLONG + TEXT_TYPE + COMMA_SEP +
                    " )";

    private static final String SQL_DELETE_ENTRIES =
            "DROP TABLE IF EXISTS" + DBEntry.TABLE_NAME;

    public class DatabaseHelper extends SQLiteOpenHelper {

        public static final String DATABASE_NAME = "TeaCounter.db";
        public static final int DATABASE_VERSION = 1;

        Context context;
        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this.context = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SQL_CREATE_ENTRIES); //creates Database
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // This database is only a cache for online data, so its upgrade policy is
            // to simply to discard the data and start over
            db.execSQL(SQL_DELETE_ENTRIES);
            onCreate(db);
        }

        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            onUpgrade(db, oldVersion, newVersion);
        }

        public void storeCounts() {
            DatabaseHelper mDbHelper = new DatabaseHelper(context);
            SQLiteDatabase db = mDbHelper.getWritableDatabase();

            // Create a new map of values, where column names are the keys
            ContentValues values = new ContentValues();
            values.put(DBEntry.COLUMN_NAME_ENTRY_ID, 1);
            values.put(DBEntry.COLUMN_NAME_TITLE, "Tea Counter Table");
            values.put(DBEntry.COLUMN_NAME_SUBTITLE_OOLONG, "Oolong Tea");
        }
    }
}

我考虑使用 SQL 数据库,因为我希望能够对多个按钮执行此操作。 不过,我也愿意接受任何其他实现此目标的方法的建议。

最佳答案

如果你只想存储一个整数,也许你可以看看 DefaultSharedPreferences 类。请参阅此链接:http://developer.android.com/reference/android/content/SharedPreferences.html

如果您从 fragment 中执行此操作:

SharedPreferences pref = getActivity().getSharedPreferences("keyname", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("counter", integer);
editor.commit();

然后当您想要检索它时,假设您已经拥有 SharedPreferences 实例

Integer counter = pref.getInt("counter", 0);

希望对您有帮助。

关于java - 将整数存储在 SQL 数据库中并在 fragment 中检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849608/

相关文章:

java - 带有嵌入式数据库的 Spring Boot 数据 jar

java - 如何从entry.getValue 获取另一个HasMap?

Java获取第一个元素然后删除第一个元素打印其余元素

java - 在单节点群集上使用分布式缓存和FileReader

android - 必须是 : View. VISIBLE、View.INVISIBLE、View.GONE 之一

Android fragment popBackStack 和替换不删除 View

android - 滑动菜单切换选项

Android gradle - 具有不同风格的调试和发布资源

java - 无法解析 fragment 中的方法 'findViewById(Int)'

android - 过渡期间来自后面的新 fragment View