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