Java 如何刷新LoaderManager

Java 如何刷新LoaderManager,java,android,android-asynctask,android-recyclerview,android-loadermanager,Java,Android,Android Asynctask,Android Recyclerview,Android Loadermanager,我读了很多文章和指南,但在使用LoaderManager从SQLite数据库获取数据时,我仍然面临许多问题 我已经和它斗争了一个多星期,我按照许多不同的例子多次编辑代码,但问题仍然存在 首先,我必须说我的AsyncTaskLoader返回我创建的对象列表,因此我不能依赖CursorLoader方法来“刷新”查询 这是我的AsyncTaskLoader,从中我可以得到一个MyContact列表 public class MyLoader extends AsyncTaskLoader<Lis

我读了很多文章和指南,但在使用
LoaderManager
SQLite
数据库获取数据时,我仍然面临许多问题

我已经和它斗争了一个多星期,我按照许多不同的例子多次编辑代码,但问题仍然存在

首先,我必须说我的
AsyncTaskLoader
返回我创建的对象列表,因此我不能依赖
CursorLoader
方法来“刷新”查询

这是我的
AsyncTaskLoader
,从中我可以得到一个MyContact列表

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;
    }    
}
公共类MyLoader扩展了AsyncTaskLoader{
私人清单;
私有包;
公共MyLoader(上下文、捆绑包){
超级(上下文);
this.bundle=bundle;
}
公共列表加载背景(){
myContacts=//在这里,我使用从数据库中获取的数据构建我的MyContact列表
返回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) {
    }
}
公共类ContactsActivity扩展AppCompatActivity实现LoaderManager.LoaderCallbacks{
专用LoaderManager LoaderManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
loaderManager=getLoaderManager();
initLoader(1,null,this);
}
....
@凌驾
公共加载器onCreateLoader(inti,Bundle){
返回新的MyLoader(此,捆绑);
}
@凌驾
public void onLoadFinished(加载程序,列出myContacts){
这里我用myContacts填充一个RecyclerView
}
@凌驾
公共void onLoaderReset(加载器){
}
}
我的问题是,在数据库更新之后,我应该通过“刷新”loaderManager获得MyContacts的更新列表。我不会向你们展示我实现目标的不同方式


我在SO和其他网站上尝试了很多方法,我甚至实现了一个
BroadcastReceiver
,但我无法让它工作,而且我无法理解我的错误,因为我没有收到任何“java”错误。

尝试在刷新时跟踪。它为各自的加载器Id重置并重新启动加载器。虽然我已经将其用于游标,但它也应该适用于自定义对象

loaderManager.restartLoader(loaderId, null, context);

在对SQLite数据库进行更新后,尝试添加以下代码行:

getContentResolver().notifyChange(uri, null);