2012-08-02 29 views
0

我正在開發一個有很多數據庫操作的小應用程序。基本上它是一個選項卡活動,有3個標籤。每個選項卡將通過解析xml文件來顯示數據。 3個選項卡活動使用相同的數據庫對象,因此只能看到兩個填充了數據的選項卡,其中第三個選項卡總是顯示我創建的進度對話框。 以下是我的填充數據庫的異步任務。如何讓android sqlite數據庫一次可以被一個任務訪問?

protected void onPreExecute() { 
     super.onPreExecute(); 
     sdbop = new SDBOperations(context); 
     hdbop = new HDBOperations(context); 
     pdbop = new PDBOperations(context); 

     sdbop.open(); 
     hdbop.open(); 
     pdbop.open(); 
    } 


    @Override 
    protected Void doInBackground(UpdateXML... statuslist) { 

     for(UpdateXML status:statuslist){ 
      if(status==UpdateXML.C){ 
       checkStatusAndPopulateDB(status,null); 
       continue; 
      } 
      String url = getUpdateURL(status); 
      String xml = XMLParser.getXmlFromUrl(url); 
      if(xml!=null) 
       checkStatusAndPopulateDB(status,xml); 
     } 
     return null; 
    } 

private void checkStatusAndPopulateDB(UpdateXML status, String result) { 
     switch (status) { 
     case S: 
      sdbop.open(); 
      dropTable(); 
      insertIntoSTable(result); 
      sdbop.close(); 
      updateSList(); 
      break; 
     case H: 
      hdbop.open(); 
      dropHTable(hdbop); 
      insertIntoHTable(hdbop,result); 
      hdbop.close(); 
      updateHList(); 

     case P: 
      pdbop.open(); 
      dropPTable(pdbop); 
      insertIntoPTable(pdbop, result); 
      pdbop.close(); 
      updatePList(); 
      break; 
     case C: 
      updateLView(); 
      break; 
     default: 
      break; 
     } 

所以每件事情都工作正常。但db對象可以連續由3個任務訪問。所以我的一個標籤總是處於等待階段,並且視圖也在進行中。 所以,如果有一個任務正在訪問數據庫,其他人應該在等待。 如何處理這種情況?

+0

檢出這個問題http://stackoverflow.com/questions/2493331/what-are-the-best-practices-for-sqlite-on-android – you786 2012-08-02 05:46:34

+0

感謝您的鏈接。非常有用的信息在那裏。 – jellybean 2012-08-02 05:53:23

回答

0

我沒有關閉我的datag base操作中的一些遊標。以便數據庫對象在執行插入和更新操作後不會被釋放。關閉所有遊標後,我的應用程序工作正常。

相關問題