【问题标题】:SQLite Android - MODE_WORLD_WRITEABLE cannot be resolved to a variableSQLite Android - MODE_WORLD_WRITEABLE 无法解析为变量
【发布时间】:2012-04-09 14:12:07
【问题描述】:

我的应用程序是一个音板应用程序,但类别中有很多声音。每个类别都在不同的活动中运行。因此,当用户选择类别时,第一个活动会调用其他活动。

该应用有 200 多种声音,我开始制作 SQLite DB,以便用户可以选择最喜欢的声音并在单独的 Activity 中显示它们。

它已经在工作,但是代码在活动中,当我将 sqlite 代码放在另一个类中的方法中时(如果我想更改某些内容,它将使我的工作更容易,因为有 20 个类别)它给了我MODE_WORLD_WRITEABLE 的“无法解析为变量”。

方法如下:

public void cria(String titulo,int id){
    SQLiteDatabase sampleDB = null;

    try {
        sampleDB =  this.openOrCreateDatabase(SAMPLE_DB_NAME, CODE_WORLD_WRITEABLE, null);

        sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                SAMPLE_TABLE_NAME +
                " (titulo VARCHAR, id INT);");

        sampleDB.execSQL("INSERT INTO " +
                SAMPLE_TABLE_NAME +
                " Values ('" +
                titulo +
                "'," +
                id +
                ");");

    } catch (SQLiteException se ) {
        Log.e(getClass().getSimpleName(), "Could not create or Open the database");
    } finally {
        //nothin to do
    }
}

我曾尝试使用 (String titulo,int id, Context cont) 和 cont.CODE_WORLD_WRITEABLE,但随后会出现类似 openOrCreateDatabase is undefined for the type banco (banco is the class name) 的错误。

如何在另一个不是活动的类中使用openOrCreateDatabase?如果你们可以给我看一个sn-p。

=========编辑===========

zrgiu 解决了这个问题,下面是我在 banco 类中的代码:

公共类银行{

private final static String SAMPLE_DB_NAME = "myFriendsDb";
private final static String SAMPLE_TABLE_NAME = "friends";



public static void cria(String titulo,int id, Context cont){
    SQLiteDatabase sampleDB = null;

    try {
        sampleDB =  cont.openOrCreateDatabase(SAMPLE_DB_NAME, Context.MODE_WORLD_WRITEABLE, null);

        sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                SAMPLE_TABLE_NAME +
                " (titulo VARCHAR, id INT);");

        sampleDB.execSQL("INSERT INTO " +
                SAMPLE_TABLE_NAME +
                " Values ('" +
                titulo +
                "'," +
                id +
                ");");

    } catch (SQLiteException se ) {
        Log.e(cont.getClass().getSimpleName(), "Could not create or Open the database");
    } finally {
        sampleDB.close();
    }
}

}

在我使用的活动中:

banco.cria(somestring,someint, this);

再次感谢zrgiu。

【问题讨论】:

    标签: java android sqlite class methods


    【解决方案1】:

    您将需要一个上下文来创建/打开本地化到您的应用的数据库。对您来说最简单的方法就是将上下文实例传递给您的函数或类,确保不会泄漏它。

    另一种解决方案是将您的 sqlite 数据库存储在外部存储中,这不需要上下文,但也会将您的数据库公开给所有其他应用程序和用户。

    【讨论】:

    • 谢谢zrgiu。如何正确传递上下文?我试图在方法 cria ( (String titulo,int id, Context cont) ) 中获取上下文,它给了我另一个错误:(
    • 这是一个好的开始。现在您只需要确保在您调用 cria() 的任何地方都需要将上下文作为参数传递(在 Activity 类中,这将是“this”)。
    • 你不懂我,这也行不通。正如我所写,“我尝试使用 (String titulo,int id, Context cont) 和 cont.CODE_WORLD_WRITEABLE 但随后“openOrCreateDatabase 未定义为 banco 类型”(banco 是类名)。”
    • 啊,对不起。您需要在方法中调用 cont.openOrCreateDatabase 而不是 this.openOrCreateDatabase。
    • 非常感谢,现在正在工作。我会用正确的代码编辑第一篇文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多