【问题标题】:Android SQLite in app billing应用计费中的 Android SQLite
【发布时间】:2012-11-03 05:31:42
【问题描述】:

我有一个测验应用程序,它在一个 sqlite 数据库中填充了大约 20 个不同类别的问题。我想在应用计费中实现,例如,如果有人购买 Category1,那么这些问题将被添加到数据库中,而不是其他问题。我的一些问题属于两类,所以让我们说 Category1 和 Category2。

try {
            for (int n = 1; n < sqlString.length; n++) {

                db.execSQL("INSERT INTO " + DATABASE_TABLE + " VALUES ("
                        + sqlString[n] + ");");

            }
            db.setTransactionSuccessful();
        } finally {
            db.endTransaction();
        }

这是我当前在 SQLite 类的 onCreate 方法中设置的。 sqlString 是一个字符串数组,包含我迄今为止的所有 500 个问题。

我将在另一个表中存储一个类别是否已购买(但我愿意接受有关如何执行此操作的其他建议)。我计划创建一个读取这个数据库的类,设置布尔值 true 或 false 是否每个类别都已购买。所以

boolean cat1 = CheckIfCategoryHasBeenBought(category1)

等等。然后如果它已经被购买,我将实现一个方法,如

boolean[] catChecker = {cat1, cat2, cat3, etc....}
SQLite info = new SQLite(this);
info.open();
info.addQs(catChecker)
//this will pass the true and false boolean values for each method then 
//based on that I choose to implement or not
info.close();

但是我不知道这是否是一个好方法。我不确定如何检查该值是否已添加(因为它与已购买的另一个类别交叉)。我在想一个光标最好检查是否已经添加了值但是我如何让光标进行搜索?

我认为可以实现的方法是

1) 我只使用与购买的问题相关的字符串创建一个字符串数组。 2) 我在上面的 for 循环中创建了一个 if 语句,用于检查字符串是否来自购买的类别 3) 我将值“null”赋予所有尚未购买的字符串,然后添加一个 if 语句,仅当 sqlString[n] 不为空时才执行 SQL。

你们知道如何最好地设置它吗?

【问题讨论】:

    标签: android sqlite in-app-billing


    【解决方案1】:

    您是否考虑过从一个完整的数据库开始——即包含任何人都可以购买的所有问题——然后删除那些不再适用的问题?

    【讨论】:

    • 我不想这样做,因为它更容易破解。我决定将每个问题包含在一个 if 语句中,其中包含适用于它的每个类别,如果该问题尚未被购买,它仍然设置为 null。
    【解决方案2】:

    有很多方法可以做到这一点,我认为会有不止 1 个好的答案。如果您有服务器,则可以执行诸如返回授权数据库/字符串/等列表之类的操作。您可以使用它来引用不同的表。您还可以创建表或使用下载表的共享首选项。名单还在继续。

    服务器选项会增加一层安全性。存储的表索引更容易被盗用,但也可能更容易实现,并使您能够离线使用类别。

    【讨论】:

    • 我无法使用服务器:/ 我可能会坚持使用表格或共享首选项,每周左右或类似的时间运行许可证检查。对剩下的问题有什么想法吗?
    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2012-06-29
    相关资源
    最近更新 更多