如何在后台线程中使用RX从android中的资产文件夹读取文件

如何在后台线程中使用RX从android中的资产文件夹读取文件,android,rx-java,Android,Rx Java,这是我的代码使用此代码我正在从assets文件夹读取文件并解析到Model对象,但我想在后台线程而不是主线程中读取此文件,以便获取数据主线程请建议我如何在后台线程中实现读取文件并在主线程中获取值。您可以使用可观察的如下: private ModelObject model; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { } private void readF

这是我的代码使用此代码我正在从assets文件夹读取文件并解析到Model对象,但我想在后台线程而不是主线程中读取此文件,以便获取数据主线程请建议我如何在后台线程中实现读取文件并在主线程中获取值。

您可以使用
可观察的
如下:

private ModelObject model;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

    }

    private void readFile() {
        if (model == null) {
            Gson gson = new Gson();
            final String helpItem = “my _file.json”;
            InputStream stream = null;
            try {
                stream = getResources().getAssets().open(helpItem);
                Reader reader = new InputStreamReader(stream);
                model = gson.fromJson(reader, ModelObjects.class);
                reader.close();
                stream.close();
            } catch (IOException e) {
                Timber.w(e);
            } finally {
                fileclose();
            }
        }
    }
Observable.fromCallable(newcallable(){
@重写公共ModelObject调用()引发异常{
return readFile();//使readFile返回ModelObject
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@覆盖订阅上的公共无效(d){
}
@重写公共void onNext(ModelObject o){
}
@覆盖公共无效onError(可丢弃的e){
}
@重写公共void onComplete(){
}
});

来自内存,但是类似于
Observable.fromCallable(()->readFile()).subscribeOn(Schedulers.io()).subscribe()的东西应该这样做,所以我们必须保留在OnCreate方法中@Bach Vu任何你想要的地方这是两种方法或单一方法@Bach Vu你能推荐我吗,因为我是RXIt的一个新的调用,创建一个
可观察的
,然后在
io
线程中加入它,并在
主线程上收听它,我建议您阅读本文,了解何时使用可观察的
类型
Observable.fromCallable(new Callable<ModelObject>() {
      @Override public ModelObject call() throws Exception {
        return readFile(); // Make readFile so that it returns ModelObject
      }
    })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<ModelObject>() {
          @Override public void onSubscribe(Disposable d) {

          }

          @Override public void onNext(ModelObject o) {

          }

          @Override public void onError(Throwable e) {

          }

          @Override public void onComplete() {

          }
        });