【问题标题】:Android project with local DB and remote DB具有本地数据库和远程数据库的 Android 项目
【发布时间】:2014-02-22 02:11:14
【问题描述】:

所以基本上我需要一个可以在互联网可用或不可用的情况下运行的应用程序。所以我很自然地想到:SQLite 和 MySQL 后端。但我的问题是:我应该采取什么方法?

  • 只在 SQLite 上工作,然后单击按钮将工作上传到服务器数据库?
  • 或者混合使用以下内容:当互联网不可用时,在 SQLite 上工作,当互联网可用时,在 MySQL 上工作(在互联网离线时上传之前完成的工作)?
  • 或者其他方式?

我不想浪费时间试用/测试这两种方法。请告诉我那些做过类似项目的人如何处理这个问题。我很确定这种项目被广泛遇到。

此外,我如何检查互联网是否可用(同时不会使应用崩溃),以便我能够在 2 种工作方式(离线和在线)之间进行选择?

我们将不胜感激所有帮助。

【问题讨论】:

  • 我建议您在后端使用 SQLite 和一些脚本来生成要从应用程序下载的更新数据库,这可能是最简单的方法(已经在我的一个应用程序中这样做了),但很难知道什么最适合您 cz 我们不知道您的应用程序是如何工作的,以及您的数据库在您的应用程序中的作用是什么,如果您能更好地解释您的应用程序将更容易提供帮助
  • 所以,android 应用的目的是收集用户的销售信息,当然,这些信息应该集中在远程服务器上。但是在某些情况下,有些用户只使用wifi上网,所以他们在输入报告时不会一直上网。他们需要为他们访问的每个客户填写一份报告。他们中的一些人在现场有wifi,但有些人没有。所以我的用户必须能够在应用程序中输入他的数据,无论他将数据放在本地还是远程服务器上。这不是他关心的问题。应用程序必须具有内置逻辑才能进行同步
  • 您知道某处有此类应用类型的演示或教程吗?

标签: android mysql android-sqlite


【解决方案1】:

我会说在 sqlite 上离线工作,然后当您感觉到互联网连接同步时。 Checking for network 相当琐碎。

ConnectivityManager connMgr = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
    // sync data
} 

【讨论】:

  • 所以步骤是:1.启动应用程序,2.检查SQLite DB是否存在,如果不存在,则创建它,3.如果有互联网则下载用户表以能够验证用户,如果没有互联网……那该怎么办?
【解决方案2】:

我做过一个这样的项目。我的方法是将所有内容与主要任务一起记录在本地数据库中。我有一个后台任务,它接受每笔交易并尝试将其上传到后端数据库,它用状态码标记每笔交易,因为后端接受了它。如果上传失败,我使用了一个滑动窗口来显示重试的频率。我会在一秒钟内尝试,然后是两到四次,等待时间加倍,直到我成功或达到一个小时,此时无论如何我每小时都会再试一次。这对我们有用,但如果对你不起作用,你可以设计一些不同的东西。

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2019-02-08
    • 2011-10-17
    • 1970-01-01
    • 2016-11-17
    • 2020-03-12
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多