我试图找出如何在Android 3.0中使用Loaders ,但似乎无法得到它的工作。 文档只描述使用CursorLoader但我使用AsyncTaskLoader 。 从文档看来,你应该只需要实现AsyncTaskLoader.loadInBackground()但是它在getLoaderManager().initLoader()之后永远不会被调用,然后在callback中创build加载器。 我可以看到debugging消息说Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}所以它看起来像它被成功创build。 目前SDK中的加载器是否可能被破坏,或者在创build加载器后需要调用某些方法? (他们没有在CursorLoader例子中做到这一点)。 编辑:好像调用forceLoad()返回的加载程序上的initLoader()开始加载至less,但这意味着你不能正确处理旋转:(
将SQLiteOpenHelper的单个实例作为子类应用程序的成员是否可以,并且让所有需要SQLiteDatabase实例的活动从一个帮助器中获取?
我有一个数据加载系统build立使用自定义加载程序和游标,从活动和片段很好的工作,但没有LoaderManager(我可以find)在服务。 有谁知道为什么LoaderManager被排除在服务之外? 如果不是有解决这个问题的方法吗?
按照在Android中使用SQLite的指导 ,我遇到了麻烦。 我使用ListFragment而不是ListActivity (如示例中所示),所以我使用ListFragment实现LoaderManager.LoaderCallbacks<Cursor>来代替。 然后,在fillData()方法中: private void fillData() { // Fields from the database (projection) // Must include the _id column for the adapter to work String[] from = new String[] { NotesSQLiteHelper.COLUMN_TITLE }; // Fields on the UI to which we map int[] to = new int[] { R.id.label }; getLoaderManager().initLoader(0, null, this); //error […]
对于我来说,如果你有多个Loader,不知道如何获得正确的光标。 比方说,你定义两个不同的装载机: getLoaderManager().initLoader(0,null,this); getLoaderManager().initLoader(1,null,this); 然后在onCreateLoader()你做不同的事情取决于id: @Override public Loader<Cursor> onCreateLoader(int id, Bundle arg1) { if (id==0){ CursorLoader loader = new CursorLoader(getActivity(), MaterialContentProvider.CONTENT_URI,null,null,null,null); }else{ CursorLoader loader = new CursorLoader(getActivity(), CustomerContentProvider.CONTENT_URI,null,null,null,null); }; return loader; } 到现在为止还挺好。 但是如何在onLoadFinished()中获得正确的游标,因为你没有得到任何id来为正确的Cursoradapter标识正确的游标。 @Override public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { mycursoradapter1.swapCursor(cursor); if(isResumed()){ setListShown(true); }else { setListShownNoAnimation(true); } } //and where to get the […]
关于LoaderManager的initLoader和restartLoader函数之间的区别我完全失去了: 他们都有相同的签名。 restartLoader不存在(“启动一个新的或重新启动一个现有的Loader在这个pipe理器”),也会创build一个加载器。 这两种方法有一些关系吗? 调用restartLoader是否总是调用initLoader ? 我可以调用restartLoader而不必调用initLoader ? 是否保存两次调用initLoader刷新数据? 我应该什么时候使用其中的一个(重要!)为什么?
我创build了一个小应用程序,试图了解LoaderManager和CursorLoader类的function。 我已经在我的FragmentActivity类上实现了LoaderCallbacks<Cursor> ,并且一切正常,除了当我通过ContentResolver.update()或ContentResolver.insert()方法更新数据时, onLoadFinished()不会被调用,并且作为结果我的数据不会更新。 我有一个自定义ContentProvider,我想知道如果问题是在我的ContentProvider不通知数据改变或其他。
由于Honeycomb和v4 Compatibility Library可以使用AsyncTaskLoader 。 据我所知, AsyncTaskLoader可以通过像屏幕翻转之类的configuration更改而生存下来。 build议使用AsyncTaskLoader而不是AsyncTask ? LoaderManager得到图片吗? 但是我还没有find任何关于如何正确使用AsyncTaskLoader好例子。 文档也没有提供任何示例。 谁能提供一些很好的例子。
我是Android新手,我正在做一个简单的应用程序来获得一些基本的经验。 我的应用程序非常简单,包括广播接收器和其他一些活动。 这两个组件都使用单个数据库,所以理论上可能会同时尝试访问数据库。 目前我只是简单地实例化db对象(这是一个SQLite数据库帮助类),每次我需要它,并执行所需的操作:查询,插入等 从我在这里和其他一些文档中读到的,这有一个问题,即在数据库被并发访问的情况下,获得一个“数据库locking”exception,所以更好的方法是有一个这个数据库对象的实例,所以所有组件始终使用相同的db连接。 上述推理是否正确? 单身人士是否会成为一个足够好的解决scheme呢? 我知道一些纯粹主义者可能会反对,但请注意,这是一个相当简单的应用程序,所以我可以负担得起的事情,我不会在其他情况下。 否则,更好的select是什么? 我已经阅读过关于使用内容提供者的内容,但是这对我来说太多了,除此之外,我不想与其他活动分享数据。 我确实看过这篇文章 ,发现它相当有帮助。
Android SDK文档说startManagingCursor()方法是depraated: 此方法已弃用。 用LoaderManager代替新的CursorLoader类; 这也可以通过Android兼容性包在较老的平台上使用。 此方法允许活动根据活动的生命周期来pipe理给定游标的生命周期。 也就是说,当活动停止时,它会自动调用给定游标上的deactivate(),当它稍后重新启动时,它会为你调用requery()。 当活动被破坏时,所有被pipe理的游标将被自动closures。 如果您的目标是HONEYCOMB或更高版本,请考虑使用LoaderManager,而不是使用getLoaderManager() 所以我想用CursorLoader 。 但是当我需要CursorLoader构造函数中的URI时,如何使用它与自定义的CursorAdapter和没有ContentProvider ?