来自数据库的Android更新信息

时间:2011-12-28 08:55:24

标签: android json sqlite

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

  1. 应用程序启动,我正在删除sqlite数据库中的所有数据 再次插入(如果json中有一些更改,则需要它 数据)。
  2. 当我下载新的json用户时,看不到任何信息,因为我已经删除了它。他可以定期查看单个项目的下载时间并插入数据库中。
  3. 完成整个过程并下载所有内容后,插入用户可以看到所有新的可用信息。
  4. 所以我需要知道如何做这件事:当我开始从应用程序启动时从json下载数据时,用户必须可以查看旧信息。当我准备好所有信息并且所有内容都被下载时,整个JSON我必须删除/更新/插入新数据,所有内容都必须快速发生,用户必须注意不到。

    知道我该怎么办?

    提前致谢!

2 个答案:

答案 0 :(得分:1)

有三种可能性。

的AsyncTask

这是第一个'明显'的选择,直到你意识到框架有很多问题(比如how to handle onConfigChange

ContentHandler / Account / SycnService

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

服务

我选择使用IntentService,我非常满意。

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

答案 1 :(得分:0)

您需要使用 AsyncTask

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

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

步骤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();
    }

}