我有两个数据需要从外部应用程序访问并存储.根据文档,ContentProviders是唯一可能的方式,但它也提到了外部存储. ContentProviders实现类似数据库的“接口”,对于两个数据,使用数据库是非常不必要的.我宁愿将它们保存到文件中,但是通过实现抽象方法使用ContentProvider是有问题的,因为这些方法被构造为数据库查询.

我知道没有任何指定ContentProviders必须使用下面的数据库来存储数据,但有没有其他方法来存储必须共享到文件系统的最小数据量?

解决方法

我只是使用MatrixCursor来解决这个确切的问题.看看吧.

编辑:对不起,当我回答时,我刚刚扫描了问题. ContentProvider是应用程序共享数据的唯一方式.应用程序中的活动可以使用SharedPreferences来处理较小的数据,并添加持久性.

编辑v2:这是我用来为我的ContentProvider的查询功能填充MatrixCursor的函数.我正在使用我创建的预定义VIEW,它返回一组不同的值,这会设置一个带有_ids的游标,我可以传递给我的ExpandableListView.

private Cursor getFactions() {
        MatrixCursor mc = new MatrixCursor(Model.Faction.PROJECTION);
        sqliteDatabase db = dbHelper.getReadableDatabase();
        Cursor c = db.query(MODELFACTION_TABLE_NAME,new String[] { Model.Faction.FACTION },null,Model.Faction.FACTION + " ASC");
        c.movetoFirst();
        do {
            mc.addRow(new Object[] { c.getPosition(),c.getString(c.getColumnIndex(Model.Faction.FACTION))});               
        } while (c.movetoNext() && ! c.isAfterLast());
        c.close();
        db.close();
        return mc;
    }

android – 没有SQL的ContentProvider的更多相关文章

  1. Android SQLite数据库已损坏

    此链接完全描述了我的问题:http://old.nabble.com/Android-database-corruption-td28044218.html#a28044218现在大约有300人使用我的Android应用程序,每次使用此堆栈跟踪向服务器发送崩溃报告时:结果是应用程序崩溃并且数据库中的所有数据都丢失了.需要注意的一点是,每次我读取或写入数据库时,我都会得到一个新的sqliteData

  2. android – SQLCipher – 在桌面上打开加密数据库

    我在Android上尝试使用sqlCipher.我写了一个小应用程序,在模拟器上创建了一个包含一个表和几条记录的数据库.然后,我将数据库从模拟器拉到我的桌面上.我查看了sqlCipher文档,但我无法弄清楚如何在桌面上实际解密数据库,以便查询其内容.我想确保我实际插入记录.访问记录的最简单的过程是什么?

  3. 如何在我的Android应用程序中获取SQLite数据库的URI?

    我有一个带有名为“myTestDB”的数据库的Android应用程序,其中包含一个名为“list_items”的表.我想使用CursorgetContentResolver().query()方法来获取要添加到SimpleCursorAdapter的游标.query()方法的第一个参数是一个URI,我不确定URI应该是什么样子.解决方法它是相当简单的方法调用看起来像这样mDataBase.quer

  4. 在Android上同步SQL数据库与REST远程服务器的最佳实践

    编辑:例如,采用方法2,重写的ContentProvider#bulkInsert使用数据库事务可以大大加快批量插入操作:见thisquestion.解决方法最佳选择需要适当的API实现–何时应存储一些db_version.并且在更新服务器期间响应数据和操作类型–添加,更新,删除.

  5. 可以从Android SQLiteConstraintException获取特定的错误详细信息?

    我对某些数据收到以下错误,概念很清楚:但是,这并没有帮助我找到哪个特定记录具有无效的FK.而不是颠覆我的代码并尝试用新事务隔离每个插入,是否有任何方法可以打开(或提取)日志记录,使用有用的详细信息,例如有问题的表,甚至导致问题的FK值?

  6. android – 没有SQL的ContentProvider

    我有两个数据需要从外部应用程序访问并存储.根据文档,ContentProviders是唯一可能的方式,但它也提到了外部存储.ContentProviders实现类似数据库的“接口”,对于两个数据,使用数据库是非常不必要的.我宁愿将它们保存到文件中,但是通过实现抽象方法使用ContentProvider是有问题的,因为这些方法被构造为数据库查询.我知道没有任何指定ContentProviders必须使用下面的数据库来存储数据,但有没有其他方法来存储必须共享到文件系统的最小数据量?

  7. android – 为什么我们需要onUpgrade(); SQLiteOpenHelper类中的方法

    我正在遵循这个教程可以任何身体请让我清楚这段代码.问题onUpgrade()的目的是什么;方法?重要为什么我们在这个方法中删除表并重新创建?提前致谢.解决方法onUpgrade基本上用于处理任何新版本应用程序的新数据库更改.在onUpgrade中并不总是需要删除表,这取决于您的用例.如果要求不要保留旧版本应用程序中的数据,那么drop应该会有所帮助,但是如果它更改架构那么它应该只有更改脚本.

  8. Android上的ORMLite没有调用onCreate

    使用Ormlitev4.40,我尝试让我的应用程序运行,但似乎忽略了onCreate函数我的DatabaseHelper看起来像这样(片段样式)我的MainActivity调用DatabaseHelper,如下所述:我试过重新安装应用程序,升级数据库版本,没有任何作用.我确实看到了构造函数调用(包括拼写错误:-),但onCreate和onUpgrade却没有被调用.任何帮助赞赏巴里解决方法创建Or

  9. android – 什么时候调用OnUpgrade以及它如何获取oldVersion参数?

    我正在为我当前的应用程序进行更新.我的应用程序使用sqliteDB,到目前为止我的版本1.我将需要在第二个版本中更改/引入新表.我做了我的研究,我发现要做到这一点,最好的方法是使用switch语句,在其中我以db-through方式对db进行更新.我的问题是,android如何知道onUpgrade()中的旧版本是什么?事实上,什么时候被称为?因此,对于第一次下载我更新的应用程序的用户,我认为不会调用onUpgrade()!Android如何知道何时不调用onUpgrade()?

  10. Android SQL:检查数据库中的记录是否存在

    我正在尝试根据特定的ID查询我的数据库.如果这是第一次运行活动,则表将与id列一起存在,但不会有具有特定ID的记录.如何检查特定记录是否存在,如果不存在,请添加它?关于检查特定列是否存在,我发现了很多内容,但没有关于检查特定记录是否存在的信息.到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但实际上由于某种原因返回1.我可以在if语句中使用什么来验证是否尚未创建id列?

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部