2015-06-17 20 views
1

這個應用程序有很多功能,但一個是這樣的,學生可以搜索他想要的書,然後應用程序會告訴他這本書是哪裏,哪個書架..作者姓名,標籤號.. 如果新書已經到達到圖書館如何我可以更新現有的數據庫,這將是每個電話, 我可以發送更新的數據庫將如何可能嗎? 或者我可以發送新的SQL查詢怎麼可能? 或您的任何建議? 該應用程序處於脫機狀態,我不希望它每次都使用互聯網,只在一個星期內更新一次。如何在每臺設備上更新我的android應用程序的現有數據庫?

+2

使用Alarmmanager來請求在一週的時間間隔的服務器,而服務器添加新書時,它只是維持時間戳正在添加,當客戶端應用程序點擊服務器時,只需檢查時間戳(即一週記錄之前)並將JSON響應發送給客戶端。 –

+0

你能分享一些有用的鏈接,我是新來的android,剛剛學會了如何實現數據庫,其餘我不知道在哪裏把我的新的更新或東西,以及這些將如何到達用戶等 –

回答

1

您需要更改在擴展SqliteOpen Helper的Database類中的OnCreate方法中傳遞的版本號。當安裝新版本的應用程序時,它會調用OnUpgrade(..)方法,在這裏寫下所有的查詢。

1

首先你需要更新已經在你的應用程序中創建的現有數據庫的版本。

這是短暫的約

onUpgrade()

1. SQLiteOpenHelper should call the super constructor. 
2. The onUpgrade() method will only be called when the version integer is larger than the current version running in the app. 
3. If you want the onUpgrade() method to be called, you need to increment the version number in your code. 
0

正如@Rohit Heera提到的,應用程序升級將解決您的問題,但在我的答案我會回答不同的方法。

如果新書趕到圖書館,我怎麼可以更新現有的 數據庫,這將是每部手機上

當一本新書到達,或者你有準備更新數據庫的藏書,那麼你可以計劃發送推送通知給每個設備,讓用戶知道他們是一些新書可用。 之後(在點擊推送通知時),客戶有責任打開服務器apis並獲取新書。

方針日程推送通知:

  • 每週推送通知
  • 作爲一個當了一本新書到達。
  • 每當書籍的集合(可以說50)到達。

這樣你就不會強制用戶更新應用程序。

+0

到目前爲止它的好,我得到了想法,但如何做到這些你可以選擇一些鏈接? –

+0

發送推送通知並創建Web API取決於您正在閱讀的服務器端技術。 推在android上:https://developers.google.com/cloud-messaging/android/start 在OnMessageReceive()中,您可以點擊web api並獲取數據。獲取數據後,將此數據添加到本地數據庫。 – guptakvgaurav

0

聽起來你有一個靜態數據庫,你只是想替換設備上的文件。如果是這種情況,試試這個。

您可以壓縮新的數據庫文件並將其放入原始目錄。

當應用程序啓動並創建連接之前,你需要刪除與當前數據庫(請務必保持數據庫路徑的軌道後)

File existingDb = context.getDatabasePath([name of database]); 
if(dbDir.exists()) { 
     dbDir.delete(); 
    } 

然後解壓縮新的數據庫文件,找到壓縮文件中的正確文件並將其複製到您之前跟蹤的數據庫目錄。

ZipInputStream zis = new ZipInputStream(context.getResources().openRawResource([zip res])); 

try { 
     ZipEntry ze = null; 
     while ((ze = zis.getNextEntry()) != null) { 
      String fileName = ze.getName(); 
      // ensure only plists are added to the input streams 
      if (DATABASE_FILE_NAME.equals(fileName)) { 
       int actual = 0; 
       byte[] baf = new byte[MAX_DOWNLOAD_CHUNK]; 
       FileOutputStream out = new FileOutputStream(new File([outDir], fileName)); 
       while ((actual = zis.read(baf, 0, MAX_DOWNLOAD_CHUNK)) > 0) { 
        out.write(baf, 0, actual); 
       } 

       out.flush(); 
       out.close(); 
       zis.closeEntry(); 
      } 
     } 
    } finally { 
     try { 
      zis.close(); 
     } catch (IOException e) { 
      // file is already closed. ignore 
     } 
    } 

您現在應該能夠連接到新的數據庫按正常

+0

我最喜歡這個想法..因爲每一個手機都會有相同的數據庫靜態,所以如果要插入新書,我必須將整個數據庫發送給每個用戶並替換舊的..但是我該怎麼做,如果在PC上的管理更新數據庫,然後它將如何發送給每個用戶 –

+0

此解決方案僅適用於用戶更新應用程序時(需要新的數據庫在apk中) 如上所述,它應理想地使用以下之一: 1。推通知 2.同步管理器 3.在運行時發送請求在服務器上的任何更新 顯然這些都需要更多的工作 – Stimsoni

+0

爲什麼即使我的問題擱置????如果我不知道誰會回答我的問題???誰會幫我,這是我第一次嘗試在這裏我對他們的行爲感到失望......我真的需要這個東西的幫助..謝謝你們的支持..如何激活我的帳戶? –

相關問題