Android:如何自动同步数据

时间:2015-01-07 17:41:12

标签: android android-asynctask android-syncadapter android-async-http

在我的应用程序中,我将从服务器获取大量数据。我想通过设备自动同步所有数据。即使我的应用程序未被使用,我也希望同步数据。

现在我通过使用AsyncTask完成了这项工作。但是获取数据需要很长时间。

这是我在MainActivity中编写的代码。

public class UpdateTask extends AsyncTask<Void, Void, Void> {

      private Context mCon;
    public UpdateTask(Context con)
    {
        mCon = con;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute(); 
    }
    @Override
    protected Void doInBackground(Void... nope) {
        try {
            // Set a time to simulate a long update process.

            //Thread.sleep(4000);
            getData();
            getProjectInit();
            getProjRequirements();
            return null;

        } catch (Exception e) {
            return null;
        }
    }
   @Override
    protected void onPostExecute(Void nope) {

    }

public void getProjRequirements()
    {
        projList = Project.listAll();
        for(int i = 0;i<projList.size();i++)
        {
            proj = projList.get(i);
        RequestParams params2 = new RequestParams();
        AsyncClientHandler.get("projectMaster/Getdetails/"+proj.p_id, params2, new AsyncHttpResponseHandler()
        {
            @Override
            public void onFailure(int statusCode, Header[] headers,
                    Throwable error, String content) {
                // TODO Auto-generated method stub
                super.onFailure(statusCode, headers, error, content);
            }

            @SuppressWarnings("deprecation")
            @Override
            public void onSuccess(int statusCode, Header[] headers,
                    String content) {
                // TODO Auto-generated method stub
                super.onSuccess(statusCode, headers, content);
                //Log.i("projectid",proj.p_id.toString());
                try
                {
                    JSONObject data = new JSONObject(content);
                    Log.i("projreq_content",content.toString());
                    JSONArray projectrequirement = data.getJSONArray("requirements");
                    Log.i("requirement",projectrequirement.toString());
                    for(int i=0;i<projectrequirement.length();i++)
                    {
                        JSONObject projrequire = projectrequirement.getJSONObject(i);
                        Log.i("projreqwqwq",projrequire.toString());
                        prrq = ProjectRequirements.getProjectRequirementsByPidRid(getValue(projrequire,"id"),getValue(projrequire,"pid"),getValue(projrequire,"sid"));

                         if(prrq==null)
                              prrq=new ProjectRequirements();
                        prrq.pr_id=getValue(projrequire,"id");
                        prrq.pid=getValue(projrequire,"pid");
                        prrq.srid=getValue(projrequire,"srid");
                        prrq.sid=getValue(projrequire,"sid");
                        prrq.rid=getValue(projrequire,"rid");
                        prrq.estimated_value=getValue(projrequire,"estimated_value");
                        prrq.expected_close_date=getValue(projrequire, "expected_close_date");
                        prrq.others=getValue(projrequire,"others");
                        prrq.requirement_id=getValue(projrequire,"requirement_id");
                        prrq.name=getValue(projrequire,"name");
                        prrq.save();
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }               
            }

        });
        }
    }

}

我已经给出了getProjectRequirements()代码。

但这需要很长时间才能将其显示在其他片段中。

对于这种情况,我可以选择什么,有人可以给我一个示例或任何教程吗?

我在Android开发者网站上有场景SyncAdapter。但对我来说这看起来很难。

有人可以给我一些简单的例子吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

假设您定期同步并且应用程序不需要 数据立即我将使用IntentService。

为了让它定期运行,我会用AlarmManager注册它。如果这样做,即使应用程序未处于活动状态,它也会运行。

http://developer.android.com/reference/android/app/IntentService.html

http://developer.android.com/reference/android/app/AlarmManager.html