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

使用sqlite开始使用RxJava

凌展
2023-03-14

我正在学习RxJava,已经阅读了几篇文章和视频。我对RxJava所能提供的东西感到非常棒,所以我认为目前我已经了解了反应式编程的含义。Dan Lew的这篇教程在一定程度上帮助我理解了使用RxJava的基础知识。但我发现,我越是认为自己已经完全理解RxJava,我脑海中浮现的问题就越多。

由于我是一个在编写代码时学得最多的人,下面是我要做的。我已经有了一个利用SQLite的应用程序。我的应用程序有7个饼图,它从数据库光标获取数据。每个饼图从光标获取不同的数据行(浮点值),并根据其数据生成图表。

我现在要做的是,我想使用RxJava从数据库中检索数据并填充图表。但我不知道RxJava应该如何与数据库交互。我是否需要使用其他库来执行此操作?因为我找到了rxjava jdbc和SqlBrite,我认为这应该对我有所帮助,但我真的需要它们吗?我还在SO中发现了一个问题,它似乎没有使用任何额外的库(当然除了RxJava),他似乎使用ContentObservable,但我仍然没有完全理解。除此之外,回答问题的人甚至不使用ContentObservable。我只知道Android有自己的可观察类。。它是否与RxJava完全兼容?如果不是,为什么同名?。

有人请帮帮我。。。

========================================================

针对Greybeardgeek的以下解决方案:

这是我从sqlite检索数据的Callable

public class GetIncome implements Callable<Map<String,String>> {
    public static final String FILE_NAME = "CGetIncome";

    Context myContext;
    int year, month;

    public GetIncome(Context context, int getYear, int getMonth){
        myContext = context;
        year = getYear;
        month = getMonth;
    }

    @Override
    public Map<String,String> call() throws Exception {
        Map<String,String> output = new HashMap<>();
        JarControl jc = new JarControl(myContext);
        JSONObject getIncome = jc.getIncome(year,month,0,0);

        output.put("necessities",getIncome.getString("necessities"));
        output.put("savings",getIncome.getString("savings"));

        return output;
    }
}

下面是我如何使用我主要活动中的Callable:

Callable<Map<String,String>> getIncome = new GetIncome(getContext(),2015,9);

现在我不知道如何将getIncome callable转换为Observables。您在rx中提到的fromCallables应该做到这一点。。但实际上怎么做呢?根据本教程,将演示如何使用Observable。来自,所以我希望能够通过执行Observable来使用Callables。fromCallable,但显然该函数不存在。快速google显示了这一点。fromCallable应该通过执行类似Async的操作来使用。fromCallable(),但由于我对RxJava非常陌生,我只能根据教程中显示的内容理解如何创建callable。。。

很抱歉我对RxJava的极端无知

共有1个答案

须彭亮
2023-03-14

我相信会有很多其他的观点,但到目前为止,我采取了两种不同的方法:

>

  • 创建一个同步方法,该方法访问数据库,获取光标,迭代光标以创建包含数据的数据结构(例如列表),然后返回数据
  • 创建调用该方法的可调用对象
  • 使用rx。fromCallable创建可观察的

如果需要无限多的行,请执行与上面类似的操作,但返回光标。

编辑:示例代码:

private Map<String, String> getDataFromDatabase() { 
   Map<String, String> result = new HashMap<>(); 
   // do whatever you need to (i.e. db query, cursor) to fill it in 
   return result; 
} 

private Callable<Map<String, String>> getData() { 
   return new Callable() { 
      public Map<String, String> call() { 
        return getDataFromDatabase(); 
    } 
}

// in utility class  RxUtil.java 
public static <T> Observable<T> makeObservable(final Callable<T> func) {
        return Observable.create(
                new Observable.OnSubscribe<T>() {
                    @Override
                    public void call(Subscriber<? super T> subscriber) {
                        try {
                            T observed = func.call();
                            if (observed != null) { // to make defaultIfEmpty work
                                subscriber.onNext(observed);
                            }
                            subscriber.onCompleted();
                        } catch (Exception ex) {
                            subscriber.onError(ex);
                        }
                    }
                });
    }


// and finally, 
public Observable<Map<String, String>> getDataObservable() {
   return RxUtil.makeObservable(getData());
}
 类似资料:
  • 基本用法 多数情况下,使用Glide加载图片非常简单,一行代码足矣: Glide.with(fragment) .load(myUrl) .into(imageView); 取消加载同样很简单: Glide.with(fragment).clear(imageView); 尽管及时取消不必要的加载是很好的实践,但这并不是必须的操作。实际上,当 Glide.with() 中传入的

  • 此页面将帮助您开始在项目中使用 Epoch。 安装 Epoch 可以从以下包管理器安装 Epoch: npm bower packagist GitHub 上的发布档案包含了整个 Epoch 源。要在项目中使用它,您需要使用以下文件: dist/js/epoch.min.js dist/css/epoch.min.css 先决条件 安装后,您将需要设置您的页面,以便您可以生成图表。首先,Epoch

  • 功能特性 基于虚拟 DOM,更新速度快 支持模板继承,包含,宏定义等功能 文件大小在 gzip 压缩后大概 13KB(包含浏览器实时编译模块) 支持前后端渲染 示例 <div> <h1>{title}</h1> <div ev-click={onClick.bind(self)}>Clicked: {count}</div> <ul v-for={items}> <li

  • 在本章中我们将会介绍 使用Gio.js的系统要求, 如何安装Gio.js, 引导你创建你的Gio地球(可视化的数据将展现在这个3D地球上), 解释Gio文档的组成部分。 系统要求 安装 Gio.js Hello World 其他文档资源

  • First of all, please go to the Download page to get the source code tarball of OpenResty, and see the Installation page for how to build and install it into your system. HelloWorld Prepare directory l

  • LC Design is a UI component framework for building LCUI application, it provides basic styles for typography and elements, simple layout system, CSS components and utilities. Its CSS code is based Boo