Android 从数据库获取数据并同时从服务器更新的正确方法

Android 从数据库获取数据并同时从服务器更新的正确方法,android,asynctaskloader,Android,Asynctaskloader,我想知道android中显示数据库中的用户数据,同时从服务器下载数据的正确模式是什么。因为用户不喜欢在应用程序中等待内容,所以我必须对数据库获取程序进行优先级排序,但我认为数据同步可能存在问题(旧数据可能会替换新数据) 我当前的代码: public class MyDataFragment extends Fragment implements LoaderManager.LoaderCallbacks<Object> { private final stat

我想知道android中显示数据库中的用户数据,同时从服务器下载数据的正确模式是什么。因为用户不喜欢在应用程序中等待内容,所以我必须对数据库获取程序进行优先级排序,但我认为数据同步可能存在问题(旧数据可能会替换新数据)

我当前的代码:

    public class MyDataFragment extends Fragment implements LoaderManager.LoaderCallbacks<Object> {
        private final static int LOADER_DOWNLOAD = 0x02;
        private final static int LOADER_DATABASE = 0x03; 
        private SampleAdapter adapter;
        private MainActivity mActivity;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mActivity = (MainActivity) activity;
    } 

    public Context getContext() {
        if (mActivity != null) {
            return mActivity.getApplicationContext();
        }
        return null;
    }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            adapter = new SampleAdapter();
            getLoaderManager().restartLoader(LOADER_DATABASE, null, this);
            getLoaderManager().restartLoader(LOADER_DOWNLOAD, null, this);

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.profile_fragment, container, false);
    // create listview and connect to adapter
            return v;
        }

        @Override
        public Loader<Object> onCreateLoader(int id, Bundle args) {
            switch (id) {
                case LOADER_DATABASE:
                    return new DataLoaderFromDatabase(getContext());
                case LOADER_DOWNLOAD:
                    return new DataLoaderFromRequest(getContext());
            }
            return null;
        }

        @Override
        public void onLoadFinished(Loader<Object> loader, Object data) {
            List<Object> myObjectList = (List) data;
            switch (loader.getId()) {
                case LOADER_DOWNLOAD:
                    if (myObjectList.isEmpty()) {
                        showError();
                    } else {
                        adapter.setData(myObjectList);
                    }
                    break;
                case LOADER_DATABASE:
                    if (!myObjectList.isEmpty()) {
                        adapter.setData(myObjectList);
                    }
                    break;
            }
        }

        private void showError() {
            Toast.makeText(getContext(), "Connection problem", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onLoaderReset(Loader<Object> loader) {

        }

        public static class DataLoaderFromRequest extends BetterLoader {

            public DataLoaderFromRequest(Context ctx) {
                super(ctx);
            }

            @Override
            public Object load() {
               RestClient restClient = new RestClient();
//Send request to database
                Response response = restClient.sendRequestForData();
                if (response.isSucceed()) { 
                    return response.getData();
                } else {
                    return Collections.emptyList();
                }
            }
        }


        public static class DataLoaderFromDatabase extends BetterLoader {

            public DataLoaderFromDatabase(Context ctx) {
                super(ctx);
            }

            @Override
            public Object load() {
//get data from Database
                return new Select().all().from(MyModelData.class).queryList();
            }
        }
    }
公共类MyDataFragment扩展片段实现LoaderManager.LoaderCallbacks{
私有最终静态整型加载程序\下载=0x02;
私有最终静态int-LOADER_数据库=0x03;
专用适配卡;
私人活动能力;
@凌驾
公共事务主任(活动){
超级转速计(活动);
mActivity=(主活动)活动;
} 
公共上下文getContext(){
if(mActivity!=null){
返回mActivity.getApplicationContext();
}
返回null;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
适配器=新的SamdCapter();
getLoaderManager().restartLoader(LOADER_数据库,null,this);
getLoaderManager().restartLoader(LOADER_DOWNLOAD,null,this);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.profile_碎片,容器,假);
//创建listview并连接到适配器
返回v;
}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
开关(id){
案例加载器\u数据库:
返回新的DataLoaderFromDatabase(getContext());
案例加载器下载:
返回新的DataLoaderFromRequest(getContext());
}
返回null;
}
@凌驾
public void onLoadFinished(加载器,对象数据){
List myObjectList=(List)数据;
开关(loader.getId()){
案例加载器下载:
if(myObjectList.isEmpty()){
淋浴器();
}否则{
adapter.setData(myObjectList);
}
打破
案例加载器\u数据库:
如果(!myObjectList.isEmpty()){
adapter.setData(myObjectList);
}
打破
}
}
私人厕所{
Toast.makeText(getContext(),“连接问题”,Toast.LENGTH_SHORT.show();
}
@凌驾
公共void onLoaderReset(加载器){
}
公共静态类DataLoaderFromRequest扩展了BetterLoader{
公共DataLoaderFromRequest(上下文ctx){
超级(ctx);
}
@凌驾
公共对象加载(){
RestClient RestClient=new RestClient();
//向数据库发送请求
Response=restClient.sendRequestForData();
如果(response.issucced()){
返回response.getData();
}否则{
返回集合。emptyList();
}
}
}
公共静态类DataLoaderFromDatabase扩展了BetterLoader{
公共DataLoaderFromDatabase(上下文ctx){
超级(ctx);
}
@凌驾
公共对象加载(){
//从数据库获取数据
从(MyModelData.class).queryList()返回新的Select().all();
}
}
}