我的应用程序是一个音板应用程序,但是类别中有很多声音。每个类别都在不同的活动中运行。因此,当用户选择类别时,第一个活动将调用其他活动。
该应用程序具有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,但还可以将数据库公开给所有其他应用程序和用户。