gpt4 book ai didi

android - RxJava 中的异步任务

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:36 26 4
gpt4 key购买 nike

我不明白如何在 RxJava 中翻译一个简单的 AsyncTask。举个例子:

private class Sync extends AsyncTask<String, String, String> {

@Override
protected String doInBackground(String... params) {
String proxy_arr = "";
try {
Document jsoup_proxy = Jsoup.connect(Constants.SITE_PROXY_LIST)
.userAgent(Constants.USER_AGENT)
.ignoreContentType(true)
.ignoreHttpErrors(true)
.timeout(Constants.USER_TIMEOUT)
.get();

if (jsoup_proxy != null) proxy_arr = jsoup_proxy.text().trim();
} catch (IOException e) {
new DebugLog(getActivity(), "News", "Sync PROXY", Log.getStackTraceString(e));
}
return proxy_arr;
}

@Override
protected void onPostExecute(String result) {
if (result.equals("err_internet")){
func.toastMessage(R.string.toast_err_nointernet, "", "alert");
}

reloadAdapter();
}
}

是否可以在编译RxJava一样的工作状态?谢谢!

最佳答案

您应该使用 Observable.defer() 或更好的 Observable.fromCallable 而不是使用 Observable.create(在RxJava 1.0.15) - 因为这些方法将确保适当的可观察契约,并使您避免在手动创建可观察对象时可能引入的一些错误。

此外,不要像上面的一个答案中建议的那样使用 runOnUiThread,您应该真正使用正是为此目的而创建的 AndroidSchedulers.mainThread()。只需使用 RxAndroid提供它的图书馆。

我建议采用以下解决方案:

public Observable<String> getJsoupProxy() {
return Observable.fromCallable(() -> {
try {
Document jsoup_proxy = Jsoup.connect(Constants.SITE_PROXY_LIST)
.userAgent(Constants.USER_AGENT)
.ignoreContentType(true)
.ignoreHttpErrors(true)
.timeout(Constants.USER_TIMEOUT)
.get();

return jsoup_proxy != null ? jsoup_proxy.text().trim() : "";
} catch (IOException e) {
// just rethrow as RuntimeException to be caught in subscriber's onError
throw new RuntimeException(e);
}
});
}

getJsoupProxy()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) // this scheduler is exported by RxAndroid library
.subscribe(
proxy -> {
if(proxy.equals("err_internet")) {
// toast
}
reloadAdapter();
},
error -> new DebugLog(getActivity(), "News", "Sync PROXY", Log.getStackTraceString(error)));

关于android - RxJava 中的异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33980194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com