Android 从服务中的URL加载文件

Android 从服务中的URL加载文件,android,rx-java,rx-android,Android,Rx Java,Rx Android,我尝试在服务中加载照片。 此方法在onStartCommand()中调用 但如果我关闭应用程序,我会收到一个异常: android.os.NetworkOnMainThreadException Utils.getQueryObserver()方法: 公共静态可观察getQueryObserver(上下文上下文、Uri、字符串[]投影、字符串选择、字符串[]选择、字符串顺序){ 返回Observable.defer(()->Observable.just(context.getContentRe

我尝试在服务中加载照片。 此方法在onStartCommand()中调用

但如果我关闭应用程序,我会收到一个异常:

android.os.NetworkOnMainThreadException

Utils.getQueryObserver()方法:

公共静态可观察getQueryObserver(上下文上下文、Uri、字符串[]投影、字符串选择、字符串[]选择、字符串顺序){ 返回Observable.defer(()->Observable.just(context.getContentResolver()) .query(uri、投影、选择、选择符、顺序)); } .flatMap(可观察::来自)

返回任务列表,每个任务都包含图像的URL,之后在

writeFile()


方法我依次为每个url调用OKHTTP请求。

为任何网络调用使用后台线程。如何实现它?您有什么例子吗?谢谢,.subscribeOn(Schedulers.newThread())帮助menew Thread(new Runnable(…).start()??
private void loadPhotos() {
    //add Subscription in CompositeSubscription
    mSubscription.add(Utils.getQueryObserver(this, DataProvider.CONTENT_TASKS_URI, null, LoadingTask.COLUMN_ISMAIN + " = ?",
            new String[]{String.valueOf(1)}, null)
            .subscribeOn(Schedulers.io())
             //create list of tasks
            .map(this::createTasks)
             //merge with another part of tasks
            .mergeWith(Utils.getQueryObserver(this, DataProvider.CONTENT_TASKS_URI, null, LoadingTask.COLUMN_ISMAIN + " = ?",
                    new String[]{String.valueOf(0)}, null)
                    .map(this::createTasks))

            .flatMap(Observable::from)
            // exception here
            .subscribe(this::writeFile,
                    Throwable::getCause,
                    //stop service 
                    this::stopSelf));

}
 public static Observable<Cursor> getQueryObserver(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String order) {
    return Observable.defer(() -> Observable.just(context.getContentResolver()
            .query(uri, projection, selection, selectionArgs, order)));
}