我需要制作一个ListAdapter来呈现来自多个ContentProvider的数据。ContentProvider本身代表关系数据库中的每个表。我想使用CursorLoader系统将聚合数据检索到ListView中。这是否可以使用1个加载器,还是我需要使用多个加载器?我更愿意使用一个。除了在代码中手动进行连接之外,我不确定如何让2个ContentProvider相互交互,这似乎也不是一个很好的选择。 最佳答案 您必须编写自定义加载器类。例如:publicclassFooLoaderextendsAsyncTaskLoader{C
我在我的应用程序中实现了一个Loader,用于从数据库中查询数据。我通过实现LoaderCallbacks聆听发生的变化听众。我遇到的问题是在使用onLoaderReset(Loaderloader)时当我的数据发生变化并且我想使与加载程序关联的任何数据无效并释放时的方法。在所有示例中,此方法中有以下调用:mAdapter.swapCursor(null);但问题是我没有在适配器中使用游标中的数据,而是在我的应用程序中以其他方式使用它。(例如,直接从onLoadFinished(Loaderloader,Cursordata)中返回的游标)@OverridepublicvoidonLo
我正在开发一个必须在某个时间查询的应用程序,一个超过4k行的数据库,每行有90个字段(字符串)。问题是,如果我从数据库中select*,我的光标会变得非常大(超过4MB)。并且android中的光标限制为1MB。我该如何解决这个问题,或者解决这个问题的最优雅方法是什么?是否可以将数据库拆分成更小的block并查询出来? 最佳答案 我找到了解决这个问题的方法,我想与所有需要它的人分享。intlimit=0;while(limit+100主要思想是拆分数据,因此您可以按应有的方式使用游标。如果您有索引表,它在2秒内处理5k行。谢谢,阿克
很早以前为了处理大量数据想过使用Cursor,当时发现没有效果,就没有继续深入。这次为了搞清楚Cursor是否真的有用,找些资料和源码发现是有效果的,只是缺了必要的配置。准备测试数据创建表:CREATETABLEtest_table(idINTPRIMARYKEY,nameVARCHAR(20),ageINT, addressVARCHAR(200));创建存储过程:--创建一个存储过程,用于插入10万测试数据DELIMITER//CREATEPROCEDUREinsert_test_data()BEGINDECLAREiINTDEFAULT1;WHILEi100000DO--随机生成姓名和年
我正在修改我的Android应用程序以使用ORMLite,它目前使用了一些CursorAdapters,我非常想保留它们以尽量减少编码。我不是100%确定,但似乎当ORMLite在数据库中创建一个id字段时,它总是使用id,而CursorAdapter需要_id。可以使用如下查询来解决这个问题:selectidas_id......但是Dao.queryRaw()方法返回一个列表,而不是Cursor,所以我这样做的方法是打开另一个SQLiteOpenHelper数据库连接并使用rawQuery().这行得通,但是有没有更好的方法呢?拥有两个单独的数据库连接似乎有些过分,而且可能会在以后
我需要从用户选择的SD卡中删除图像。在我的Activity中,当用户从图库中选择图片后,我执行以下代码:publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){if(resultCode==RESULT_OK){if(requestCode==SELECT_PICTURE){Utils.imgUri=data.getData();Utils.imgPath=getPath(Utils.imgUri);Filefile=newFile(Utils.imgPath);booleandeleted=file.de
我可以捕捉短信,可以看到发件人电话、正文,如果我不喜欢这条短信,我可以中止广播,但我不知道如何将这条短信标记为已读,用户可以稍后在框中阅读。我有什么想法可以做到这一点吗? 最佳答案 这可能对你有帮助:privatevoidmarkMessageRead(Contextcontext,Stringnumber,Stringbody){Uriuri=Uri.parse("content://sms/inbox");Cursorcursor=context.getContentResolver().query(uri,null,null,
我的Activity包含此代码以获取SD卡上的所有图像:String[]projection={MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA,MediaStore.Images.ImageColumns.DATA};Cursorcursor=managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,projection,null,null,MediaStore.Images.Media._ID);intcount=cursor.getCount();intima
谷歌文档指出不要使用CursorAdapters第一个构造函数,CursorAdapter(Contextcontext,Cursorc)只有两个选择,CursorAdapter(Contextcontext,Cursorc,booleanautoRequery)说Constructorthatallowscontroloverauto-requery.Itisrecommendedyounotusethis,butinsteadCursorAdapter(Context,Cursor,int).Whenusingthisconstructor,FLAG_REGISTER_CONTEN
在我的应用程序中,我使用ContentProvider并使用LoaderManager.LoaderCallbacks.fragment(View)publicclassArticleCatalogFragmentextendsBaseFragmentimplementsArticleCatalogPresenter.View,LoaderManager.LoaderCallbacks{@OverridepublicLoaderonCreateLoader(intid,Bundleargs){returnonCreateArticleCatalogLoader(args);}@Over