2012-03-26 64 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

相關問題