2013-02-17 84 views
3

我正在關注Android示例的「Searchable Dictionary」,並用一些數據(1200條記錄)預填充我的FTS3數據庫。我想在我的活動初始加載時顯示3個「默認」記錄,但我需要等到所有記錄都插入到FTS3中。當我看我的日誌看Android sqlite數據庫等待數據初始填充完成

10月2日至一十七日:26:44.188:d/WorldClockWidgetActivity(1188):默認城市排名:0

10月2日至一十七日:27:11.668:d/CitiesDatabase (1188):完成加載單詞。

@Override 
    public void onCreate(SQLiteDatabase db) { 
     mDatabase = db; 
     mDatabase.execSQL(FTS_TABLE_CREATE); 
     loadDictionary(); 
    } 

    /** 
    * Starts a thread to load the database table with words 
    */ 
    private void loadDictionary() { 
     new Thread(new Runnable() { 
      public void run() { 
       try { 
        loadWords(); 
       } catch (IOException e) { 
        throw new RuntimeException(e); 
       } 
      } 
     }).start(); 
    } 
enter code here 

我嘗試了上述改變到的AsyncTask但問題是,從「CitiesOpenHelper擴展SQLiteOpenHelper」正在加載的數據在我的主要活動的列表適配器不能被訪問。

我的問題是我怎麼知道我的數據是否已經加載,所以我可以加載默認值並顯示給用戶?

非常感謝

回答

3

第1步:將loadWords()onCreate(),擺脫了線的。

第2步:致電getReadableDatabase()getWriteableDatabase()和您的查詢從您的活動或片段開始的AsyncTask,在onPostExecute()設置你的ListAdapter

+0

非常感謝。所以我的主要活動將填充數據庫?在所有的android教程中,我們都在DatabaseHelper類中進行數據的初始設置。 – hurric 2013-02-17 19:00:41

+0

@hurric:「所以我的主要活動將填充數據庫」 - 不。 「在所有的android教程中,我們都是在DatabaseHelper類中初始化數據的設置」 - 我上面的指令不會修改這個。然而,「在所有的android教程中」,一個'DatabaseHelper'類不會出現在精靈之外。相反,程序員創建一個實例並調用'getReadableDatabase()'或'getWriteableDatabase()'。就你而言,我猜測一個活動(或片段)會這樣做。 – CommonsWare 2013-02-17 19:03:06

+0

謝謝。我想我不明白我應該如何組織我的課程。我將執行以下操作:'MainListActivity'來顯示類。 'DatabaseOpenHelper'和'DAO'類。 'DAO'類將有一個'DatabaseOpenHelper'的實例,並在每次使用後打開/關閉它。在我的'MainListActivity'的初始onCreate上,我將創建一個DAO實例,在其中填充原始文本文件中的數據。在ASyncAdapter類中。我的MainListActivity會知道DAO何時完成加載數據,然後查詢我的默認值並顯示給用戶。 – hurric 2013-02-17 19:17:31