android從服務器獲取數據,android 遠程同步,在Android上同步SQL數據庫與REST遠程服務器的最佳實踐

 2023-12-25 阅读 26 评论 0

摘要:我有一個自定義android從服務器獲取數據?Android ContentProvider,它存儲和檢索sqlite數據庫中的數據.我們假設其中一個數據庫表有一個_ID列和一個NAME列以及如下內容:|==========|========

我有一個自定義

android從服務器獲取數據?Android ContentProvider,它存儲和檢索sqlite數據庫中的數據.

我們假設其中一個數據庫表有一個_ID列和一個NAME列以及如下內容:

|==========|==========|

| _ID | NAME |

|==========|==========|

| 1 | d1 |

| 2 | d2 |

| 3 | d3 |

| 4 | d4 |

|==========|==========|

此sqlite DB與遠程數據庫保持同步,并通過網絡定期獲取新數據.

表中可能的操作如下:

>可以刪除現有行

>可以添加新行

>可以修改現有行的NAME列

現在假設所有可能的操作立即發生,并且在從遠程服務器獲取一些最新數據之后,該表的新內容必須設置如下:

|==========|==========|

| _ID | NAME |

|==========|==========|

| 1 | d7 |

| 3 | d3 |

| 4 | d6 |

| 5 | d5 |

|==========|==========|

可以有兩種不同的方法:

>查詢數據庫并檢查每個現有行以查看是否需要更新,然后添加任何新行并刪除任何缺失的行 – 盡管如果我們想要使用分頁方法更新數據庫,這種方法可能有點棘手沒有一個網絡提取

>使用單個DELETE sql命令刪除整個表,然后添加從服務器接收的所有行

在Android上,我目前正在使用批處理操作實現第二種方法,以最大限度地提高性能:

final ArrayList operations = new ArrayList();

// with this URI,the content provider deletes all rows

operations.add(ContentProviderOperation.newDelete(Users.CONTENT_URI).build());

final ContentValues values = new ContentValues();

values.put(ID_COLUMN,1);

values.put(NAME_COLUMN,"d7");

values.put(ID_COLUMN,3);

values.put(NAME_COLUMN,"d3");

values.put(ID_COLUMN,4);

values.put(NAME_COLUMN,"d6");

values.put(ID_COLUMN,5);

values.put(NAME_COLUMN,"d5");

operations.add(ContentProviderOperation.newInsert(Users.CONTENT_URI).withValues(values).build());

getApplicationContext().getContentResolver().applyBatch(MyContentProvider.AUTHORITY,operations);

這是最好的方法,還是方法1(或其他方法)在性能方面更好?

編輯:例如,采用方法2,重寫的ContentProvider#bulkInsert使用數據庫事務可以大大加快批量插入操作:見this question.

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194677.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息