【发布时间】:2015-12-02 17:04:25
【问题描述】:
我的 Android 应用中有一个简单的数据库,其中包含有关国家/地区的信息。我必须做的一件事是用国家名称填充下拉菜单。
所以,我写了一些简单的代码,如下所示:
public class FetchCountryAsync extends AsyncTask<String,Void,Cursor> {
private Context con;
private CountryConsumer consumer;
//----------------------------------------------------------------------------------------------
public FetchCountryAsync(Context con, CountryConsumer consumer) {
this.con = con;
this.consumer = consumer;
}
//----------------------------------------------------------------------------------------------
@Override
protected Cursor doInBackground(String... params) {
CountryDatabaseHelper helper = new CountryDatabaseHelper(con);
Cursor countries = helper.getCountries();
return countries;
}
//----------------------------------------------------------------------------------------------
@Override
public void onPostExecute(Cursor countries){
if(!isCancelled()){
consumer.setCountries( countries );
}
}
//----------------------------------------------------------------------------------------------
}
为了让它发挥作用,我做了很多废话——AsyncTask、interface。
我的问题是,写我自己的ContentProvider 并完全避免AsyncTask 的麻烦会更好吗?
【问题讨论】:
-
ContentProvider + LoaderCallbacksimo -
@Blackbelt 一个简单的例子会很好,如果你不介意的话:) 我的意思是一个带有 LoaderCallbacks 的存根
ContentProvider。不是全部。 :) -
喜欢这个one ?
-
@Blackbelt 绝对喜欢那个! :) 那么,决定何时使用
ContentProvider以及何时使用AsyncTask的好方法是什么? :) -
@Blackbelt 我正在努力保持代码尽可能干净。
AsyncTask+interface的做法会导致大量的接口污染。另外,所有的回调都很难维护。
标签: android sqlite android-asynctask