对于 Rx 来说有点陌生,所以我正在寻找一些关于将以下 AsyncTask
转换为 Rx 的帮助,希望这样我可以使用我已经知道可以做某事的代码来更多地可视化 Rx。我发现了一些其他一些相关的答案,但其中很多都不是网络请求,并且许多使用不同的运算符来获得不同的答案,所以我有点困惑。
这是AsyncTask
:
public class BackgroundStuff extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
UserAgent myUserAgent = UserAgent.of("xxx:xxxx:xxx");
RedditClient redditClient = new RedditClient(myUserAgent);
Credentials credentials = Credentials.userlessApp("xxxxxxxx", UUID.randomUUID());
OAuthData authData = null;
try {
authData = redditClient.getOAuthHelper().easyAuth(credentials);
redditClient.authenticate(authData);
} catch (OAuthException e) {
e.printStackTrace();
}
SubredditPaginator sp = new SubredditPaginator(redditClient);
sp.setLimit(7);
sp.setSorting(Sorting.HOT);
sp.setTimePeriod(TimePeriod.DAY);
sp.setSubreddit("pics");
sp.next(true);
Listing<Submission> list = sp.getCurrentListing();
Submission sub = list.get(1);
for (Submission submission : list) {
Log.d("test", "title: " + submission.getTitle());
}
Submission sub2 = redditClient.getSubmission(sub.getId());
System.out.println(sub2.getComments().get(0).getComment().getBody());
return null;
}
}
作为引用,这会向 Reddit 进行身份验证,然后从特定的 Reddit 子版 block 获取一些结果。
我知道我需要一个Observable
,然后.suscribeOn(Schedulers.newThread())
和.observeOn(AndroidSchedulers.mainThread())
,但不确定如何使可观察的。
最佳答案
将其包装在函数中:
Void doSomething(){
UserAgent myUserAgent = UserAgent.of("xxx:xxxx:xxx");
RedditClient redditClient = new RedditClient(myUserAgent);
Credentials credentials = Credentials.userlessApp("xxxxxxxx", UUID.randomUUID());
OAuthData authData = null;
try {
authData = redditClient.getOAuthHelper().easyAuth(credentials);
redditClient.authenticate(authData);
} catch (OAuthException e) {
e.printStackTrace();
}
SubredditPaginator sp = new SubredditPaginator(redditClient);
sp.setLimit(7);
sp.setSorting(Sorting.HOT);
sp.setTimePeriod(TimePeriod.DAY);
sp.setSubreddit("pics");
sp.next(true);
Listing<Submission> list = sp.getCurrentListing();
Submission sub = list.get(1);
for (Submission submission : list) {
Log.d("test", "title: " + submission.getTitle());
}
Submission sub2 = redditClient.getSubmission(sub.getId());
System.out.println(sub2.getComments().get(0).getComment().getBody());
return null;
}
将其包装在可观察对象中:
Observable.just(doSomething);
将其包装在延迟中,以便仅当有人订阅它时它才会运行:
Observable<Void> doSomethingObservable = Observable.defer(()-> Observable.just(doSomething))
使用subscribeOn和observeOn决定它将在哪里运行,并订阅它以使其运行:
doSomethingObservable
.suscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).subscribe();
关于android - 将此 AsyncTask 转换为 RxAndroid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167708/