【发布时间】:2017-06-27 14:02:36
【问题描述】:
我阅读了很多帖子和指南,但在使用 LoaderManager 从 SQLite 数据库中获取数据时仍然遇到很多问题。
我已经为此苦苦挣扎了一个多星期,并且按照许多不同的示例多次编辑了我的代码,但问题仍然存在。
首先,我不得不说我的AsyncTaskLoader返回一个我创建的对象列表,所以我不能依赖CursorLoader的方法来“刷新”查询。
这是我的AsyncTaskLoader,我从中获得了我的联系人列表
public class MyLoader extends AsyncTaskLoader<List<MyContact>>{
private List<MyContact> myContacts;
private Bundle bundle;
public MyLoader(Context context, Bundle bundle) {
super(context);
this.bundle = bundle;
}
public List<MyContact> loadInBackground(){
myContacts = //here I build my List of MyContact with data taken from a DB
return myContacts;
}
}
这是我实现 LoaderManager 方法的活动:
public class ContactsActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MyContact>>{
private LoaderManager loaderManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
loaderManager = getLoaderManager();
loaderManager.initLoader(1, null, this);
}
....
@Override
public Loader<List<MyContact>> onCreateLoader(int i, Bundle bundle) {
return new MyLoader(this, bundle);
}
@Override
public void onLoadFinished(Loader<List<MyContact>> loader, List<MyContact> myContacts) {
Here I fill a RecyclerView with myContacts
}
@Override
public void onLoaderReset(Loader<List<MyContact>> loader) {
}
}
我的问题是,在数据库更新后,我应该通过“刷新”loaderManager 来获取 MyContacts 的更新列表。我不会向您展示我尝试实现目标的所有不同方式。
我按照 SO 和其他网站上的示例尝试了很多方法,我什至实现了 BroadcastReceiver,但我无法让它工作,而且我无法理解我的错误,因为我没有得到任何“java”错误。
【问题讨论】:
标签: java android android-asynctask android-recyclerview android-loadermanager