gpt4 book ai didi

android - 将此 AsyncTask 转换为 RxAndroid?

转载 作者:行者123 更新时间:2023-11-29 00:04:16 25 4
gpt4 key购买 nike

对 Rx 有点陌生,所以我正在寻找一些帮助将以下 AsyncTask 转换为 Rx,希望这样我可以用我已经知道的代码对 Rx 进行更多可视化。我发现了其他一些有点相关的 SO 答案,但其中很多不是网络请求,而且许多使用不同的运算符来获得不同的答案,所以我有点困惑。

这是 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 进行身份验证,然后从特定的 subreddit 中获取一些结果。

我知道我需要一个Observable,然后是.suscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()),但我不确定如何使 observable。

最佳答案

将其包装在函数中:

    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/

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