2012-03-26 65 views
1

我的应用程序是一个音板的应用程序,但在种类很多声音。每个类别都在不同的活动中运行。因此,当用户选择类别时,第一个活动会调用其他活动。的SQLite Android的 - MODE_WORLD_WRITEABLE不能被解析为一个变量

该应用程序有超过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,上下文续)和cont.CODE_WORLD_WRITEABLE但随后给出了错误,如openOrCreateDatabase is undefined for the type banco (banco is the class name)

我如何使用openOrCreateDatabase在另一个类,它是不是一个活动?如果你们可以给我看一个片段。

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

由于zrgiu解决了这个问题,在这里不用我的代码在银行类:

公共类银行{

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,本);

再次感谢zrgiu。

回答

1

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

另一个解决办法是将存储在外部存储,不需要上下文,但也暴露了你的数据库,所有其他应用程序和用户的SQLite数据库。

+0

谢谢zrgiu。我如何正确传递上下文?我试图在方法cria((字符串titulo,int id,上下文续))中获得上下文,它给了我另一个错误:( – 2012-03-26 03:29:50

+0

这是一个好的开始。现在你只需要确保你在任何地方调用cria (),你需要传递你的上下文作为参数(在一个Activity类中,这将是“this”) – zrgiu 2012-03-26 03:39:36

+0

你没有理解我,这也行不通,正如我写的,“我试过了使用(字符串TITULO,INT ID,上下文续)和cont.CODE_WORLD_WRITEABLE但随后“openOrCreateDatabase是未定义类型银行”(是银行类名)。” – 2012-03-26 03:47:55

相关问题