当前位置: 首页 > 知识库问答 >
问题:

带有SQlite和ContentProvider操作的RxJava

阎啸
2023-03-14

我正在研究RxJava,为此我正在使用SQLite,编写一个帮助类SQLiteUtils,以便更容易地处理异步ContentResolver查询。例如,这是QueryInBackground方法:

static
public <T> Observable<T> queryInBackground(
        final ContentResolver cr,
        final Uri uri,
        final String[] projection,
        final String selection,
        final String[] selectionArgs,
        final String sortOrder,
        final CursorHandler<T> ch) {
    return  Observable.create(new Observable.OnSubscribe<T>() {
        @Override
        public void call(Subscriber<? super T> observer) {
            if (!observer.isUnsubscribed()) {
                Cursor cursor = null;
                try {
                    cursor = cr.query(uri, projection, selection, selectionArgs, sortOrder);
                    if (cursor != null && cursor.getCount() > 0) {
                        while (cursor.moveToNext()) {
                            observer.onNext(ch.handle(cursor));
                        }
                    }
                    observer.onCompleted();
                } catch (Exception err) {
                    observer.onError(err);

                } finally {
                    if (cursor != null) cursor.close();
                }
            }
        }
    }).subscribeOn(Schedulers.computation());
}

其中CursorHandler是接口:

/**
 * Implementations of this interface convert Cursor into other objects.
 *
 * @param <T> the target type the input Cursor will be converted to.
 */
public interface CursorHandler<T> {
    T handle(Cursor cu) throws SQLException;
}

我读过有关调度器的文档,但我不太确定Schedulers.computation()是否是正确的选择。

如果我想为基本的httpurlconnection操作实现类似的操作,我应该选择哪种调度程序?schedulers.newthread()schedulers.io(),我会坚持使用schedulers.io()...但不确定。

提前道谢。

万事如意,卢卡

共有1个答案

司立果
2023-03-14

根据这个答案,您应该使用schedulers.io()。相关报价:

io()由一个无界线程池支持,您可以将它用于非计算密集型任务,即不会给CPU带来太多负载的任务。因此,与文件系统的交互、与不同主机上的数据库或服务的交互都是很好的例子。

 类似资料:
  • 问题内容: 嗨,我正在使用代码,您能否让我知道为什么签名验证无效? Java签署者将 BouncyCastleProvider 与 SHA1withRSA 结合 使用,这是dotnet验证代码…。 用于签署签名数据的Java代码: 这是C#中用于签名和验证的代码: 问题答案: 这里有几个问题。 您正在对签名进行Base64解码,但不是Base64编码,而是十六进制编码。 第二个问题是方法中的(这是

  • 本文向大家介绍iOS中SQLite的操作方法,包括了iOS中SQLite的操作方法的使用技巧和注意事项,需要的朋友参考一下 今天终于花了点时间把之前项目中使用到的对SQLite操作的方法整理一下并上传到github上,下载地址:(https://github.com/peanutNote/QYSQLiteManagerDemo.git)。 与其他第三方目的一样,主要是为了使代码中有关对SQLite

  • 基本上,以原子方式,我需要执行以下操作: 从数据库读取, 根据,将存储到数据库中。 都是1。和2。应该是单个原子事务的一部分。 有没有一个简单的方法可以做到这一点?

  • 本文向大家介绍Python操作SQLite简明教程,包括了Python操作SQLite简明教程的使用技巧和注意事项,需要的朋友参考一下 一、SQLite简介 SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库。一些应用可是使用SQLite保存内部数据。它也可以在构建应用原型的时候使用,

  • 问题内容: 我试图用javafxports编写一个简单的sqlite代码。 build.gradle: 我的JavaCode: 我用./gradlew launchIOSDevice发送它并得到以下错误: 有人可以帮我吗,如何在代码中提供权限,以便创建sqlite数据库? 谢谢 问题答案: 正如@ItachiUchiha指出的,您的问题与您尝试创建数据库的位置有关: 您提供的URL可能在您的桌面上

  • 本文向大家介绍Python 处理带有 \u 的字符串操作,包括了Python 处理带有 \u 的字符串操作的使用技巧和注意事项,需要的朋友参考一下 最近遇到一个头疼的问题,用socket接收到一个字符串 格式如下: {“trade_status”: {“desc”: “\u30106\u3011 - \u8d22\u52a1\u7ed3\u7b97\u5df2\u5b8c\u6210 “}}/en