【问题标题】:Android update information from database来自数据库的 Android 更新信息
【发布时间】:2011-12-28 08:55:24
【问题描述】:

我正在开发 Android 项目,我正在从网络服务器收集一些信息。每次应用程序启动时,我都会下载 JSON 数据并在数据库中重新输入信息。我有这种情况:

  1. 应用程序启动,我正在删除 sqlite 数据库中的所有数据和 再次插入(如果 json 有一些变化,则需要这样做) 数据)。
  2. 当我下载新的 json 用户时看不到任何信息,因为我已经删除了它。他可以定期查看单个项目何时下载并插入数据库。
  3. 完成整个过程并下载并插入所有内容后,用户可以看到所有新的可用信息。

所以我需要一个想法如何做这件事:当我开始从 json 下载数据时,当应用程序启动时,用户必须可以查看旧信息。当我准备好所有信息并下载所有内容时,我必须删除/更新/插入新数据的整个 JSON,而且一切都必须发生得如此之快,以至于用户一定不会注意到这一点。

知道我该怎么做吗?

提前致谢!

【问题讨论】:

    标签: android json sqlite


    【解决方案1】:

    有 3 种可能性。

    异步任务

    这是第一个“显而易见”的选择,直到您意识到框架存在许多问题(例如 how to handle onConfigChange

    ContentHandler / Account / SycnService

    这是最复杂的解决方案。首先,您必须知道这 3 个部分是结合在一起的。因此,如果您不需要,则必须编写一个“哑”帐户,如果您有 SQLLite,则必须编写一个“半哑” ContentHandler。

    服务

    我选择使用 IntentService,我很满意。

    1. 当活动开始时,它会显示数据。它注册 Intent my.app.DATA_UPDATED。并发送 Intent my.app.DATA_REQUESTED
    2. IntentService 在带有意图过滤器 DATA_REQUESTED 的清单中声明。
    3. 收到意图后,服务会获取数据并更新数据库。完成后,它会发送一个 DATA_UPDATED 意图。
    4. Activity 会在收到 Intent DATA_UPDATED 时使用当前数据刷新视图。

    【讨论】:

      【解决方案2】:

      您需要使用 AsyncTask

      step-1从数据库中删除所有daa并在onPreExecute()方法中清除listview

      step-2在doBackground()中从服务器下载数据并保存到数据库

      step-3 onPostExecute 用最新数据更新列表视图

      import android.content.Context;
      import android.os.AsyncTask;
      import android.view.View;
      
      
      
      public class LoadingDataFromServer extends AsyncTask {
          Context currentContext = null;
      ListView listview = null;
          boolean isCancelled = false;
      
          // private ProgressDialog progressDialog = null;
          public LoadingDataFromServer(Context context, ListView list) {
              currentContext = context;
      listview = list;
      
          }
      
          @Override
          protected void onPreExecute() {
              //delete all the daa from database
      //clear listview
      
              super.onPreExecute();
          }
      
          @Override
          protected Object doInBackground(Object... params) {
              // do background processing
      
              try {
                  // getdata from server and store in SQLitedatabase
      
              } catch (Exception e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
              return null;
          }
      
          @Override
          protected void onPostExecute(Object result) {
              // TODO Auto-generated method stub
              // progressDialog.dismiss();
      //update the listview after getting the data
      
              super.onPostExecute(result);
          }
      
          @Override
          protected void onCancelled() {
              // TODO Auto-generated method stub
              isCancelled = true;
              super.onCancelled();
          }
      
      }
      

      【讨论】:

      • 我正在使用 Service 下载数据,因为当我下载 JSON 时,我想在整个应用程序中显示 ProgressBar。我不能在 AsyncTask 中这样做。
      猜你喜欢
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多