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

该应用程序具有200多种声音,我开始制作SQLite数据库,以便用户可以选择喜欢的声音并在单独的活动中显示它们。

它已经在工作,但是代码在活动中,当我将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
    }
}


我试过使用(字符串titulo,int id,Context cont)和cont.CODE_WORLD_WRITEABLE,但随后却出现错误,如openOrCreateDatabase is undefined for the type banco (banco is the class name)

如何在另一个不是活动的类中使用openOrCreateDatabase?如果你们能给我看看片段。

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

当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。

最佳答案

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

另一种解决方案是将sqlite数据库存储在外部存储中,该存储不需要Context,但还可以将数据库公开给所有其他应用程序和用户。

09-27 12:41